<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bkasliw</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bkasliw"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Bkasliw"/>
	<updated>2026-09-30T20:36:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105432</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105432"/>
		<updated>2016-11-11T21:20:22Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
[[File:UML-1.png]]&lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
===Experimental Use===&lt;br /&gt;
&lt;br /&gt;
This project is part of an experiment to test whether anonymity makes a difference in reviews of students, thus to implement it one assignment would be made as anonymous and another as anonymous and the quality and the review scores would be tested to say if there is a change in quality and values of control and test&lt;br /&gt;
&lt;br /&gt;
= UI Testing =&lt;br /&gt;
The project can be tested by doing the following:&lt;br /&gt;
&lt;br /&gt;
 Log in as Instructor using instructor6&lt;br /&gt;
 use password as password&lt;br /&gt;
 click on manage assignments&lt;br /&gt;
 Go to any assignment and edit&lt;br /&gt;
 click on the review strategy tab&lt;br /&gt;
 uncheck anonymity to disable anonymous reviews&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the student side&lt;br /&gt;
 log in as student&lt;br /&gt;
 click on assignments&lt;br /&gt;
 select your scores&lt;br /&gt;
 select view reviews &lt;br /&gt;
&lt;br /&gt;
when you check your scores for each review when you log in as a student&lt;br /&gt;
you should see the name of the reviewer&lt;br /&gt;
appended to review 1&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*controller/reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*controller/teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*model/team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UML-1.png&amp;diff=105431</id>
		<title>File:UML-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UML-1.png&amp;diff=105431"/>
		<updated>2016-11-11T21:17:57Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105068</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105068"/>
		<updated>2016-11-09T23:16:20Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105050</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105050"/>
		<updated>2016-11-09T22:23:20Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* E1698: Instructor/student control of anonymity + group-based reviewing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105048</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105048"/>
		<updated>2016-11-09T22:22:45Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Files to be Considered */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105047</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105047"/>
		<updated>2016-11-09T22:22:24Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Key People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
team.rb&lt;br /&gt;
&lt;br /&gt;
views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105046</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105046"/>
		<updated>2016-11-09T22:14:30Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105045</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105045"/>
		<updated>2016-11-09T22:13:48Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105044</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105044"/>
		<updated>2016-11-09T22:13:24Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105042</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105042"/>
		<updated>2016-11-09T22:12:20Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105041</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105041"/>
		<updated>2016-11-09T22:12:01Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105040</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105040"/>
		<updated>2016-11-09T22:11:39Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Introduction to Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105039</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105039"/>
		<updated>2016-11-09T22:11:22Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105038</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105038"/>
		<updated>2016-11-09T22:09:07Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
Assignment Creation:&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
Group Formation:&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who has graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105029</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105029"/>
		<updated>2016-11-09T21:57:11Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104678</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104678"/>
		<updated>2016-11-07T22:58:58Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
I don’t know if it would be needed for next semester, but we’d also like to allow the instructor to assign each of the assignment participants to a particular group.  Decide what would be a good way to specify that.&lt;br /&gt;
&lt;br /&gt;
Another feature that would be useful is to allow students to toggle their anonymity by setting a field in their profile.  So if someone wanted to be anonymous in an assignment that was not otherwise anonymous, they could set that field.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104677</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104677"/>
		<updated>2016-11-07T22:08:38Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
I don’t know if it would be needed for next semester, but we’d also like to allow the instructor to assign each of the assignment participants to a particular group.  Decide what would be a good way to specify that.&lt;br /&gt;
&lt;br /&gt;
Another feature that would be useful is to allow students to toggle their anonymity by setting a field in their profile.  So if someone wanted to be anonymous in an assignment that was not otherwise anonymous, they could set that field.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104676</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104676"/>
		<updated>2016-11-07T22:07:06Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
The scenario:  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
What needs to be done:  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
I don’t know if it would be needed for next semester, but we’d also like to allow the instructor to assign each of the assignment participants to a particular group.  Decide what would be a good way to specify that.&lt;br /&gt;
Another feature that would be useful is to allow students to toggle their anonymity by setting a field in their profile.  So if someone wanted to be anonymous in an assignment that was not otherwise anonymous, they could set that field.&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104675</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104675"/>
		<updated>2016-11-07T22:03:46Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
=Introduction to Expertiza=&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104674</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104674"/>
		<updated>2016-11-07T22:02:40Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Created page with &amp;quot;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =   =Introduction to Expertiza= [http://expertiza.ncsu.edu/ Expertiza] is a peer review system whic...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:FGrade.png&amp;diff=103835</id>
		<title>File:FGrade.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:FGrade.png&amp;diff=103835"/>
		<updated>2016-10-29T03:53:47Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: uploaded a new version of &amp;amp;quot;File:FGrade.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:AGrade.png&amp;diff=103832</id>
		<title>File:AGrade.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:AGrade.png&amp;diff=103832"/>
		<updated>2016-10-29T03:53:32Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: uploaded a new version of &amp;amp;quot;File:AGrade.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1645._Refactoring_Tree_Display_Controller&amp;diff=103831</id>
		<title>CSC/ECE 517 Fall 2016/E1645. Refactoring Tree Display Controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1645._Refactoring_Tree_Display_Controller&amp;diff=103831"/>
		<updated>2016-10-29T03:53:16Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1645: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/shubham2892/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passed] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed. The main objective of the project was to refactor the controller to follow good Ruby practices and improve the grade given Code Climate.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the issues detected by Code Climate for enhancing code readability and maintainability. Some of the issues detected were:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the code DRY, similar code was moved to a new function, and that was called from the remaining part of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Questionnaires')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Metareview')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Teammate Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to author feedbacks&lt;br /&gt;
  def goto_author_feedbacks&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Author Feedback')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def goto_controller(name_parameter)&lt;br /&gt;
    node_object = TreeFolder.find_by(name: name_parameter)&lt;br /&gt;
    session[:root] = FolderNode.find_by(node_object_id: node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to questionnaires&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    goto_controller('Questionnaires')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    goto_controller('Review')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    goto_controller('Metareview')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    goto_controller('Teammate Review')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def children_node_ng&lt;br /&gt;
    child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
    tmp_res = {}&lt;br /&gt;
    child_nodes.each do |node|&lt;br /&gt;
      initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
    end&lt;br /&gt;
    # res = res_node_for_child(tmp_res)&lt;br /&gt;
    res = res_node_for_child(tmp_res)&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { render json: res }&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes`.==&lt;br /&gt;
Following were removed from the two places:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
222 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- childNodes = {}&lt;br /&gt;
- tmpRes = {}&lt;br /&gt;
- nodeType = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
+ tmp_res = {}&lt;br /&gt;
+ node_type = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
The following for loops were replaced by each, as follows:&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- 143    for node in childNodes&lt;br /&gt;
- 146    for a in node&lt;br /&gt;
- 159    for nodeType in tmpRes.keys&lt;br /&gt;
- 162    for node in tmpRes[nodeType]&lt;br /&gt;
- 238   for child in tmpRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes.each do |node|&lt;br /&gt;
+ node.each do |a|&lt;br /&gt;
+ tmp_res.keys.each do |node_type|&lt;br /&gt;
+ tmp_res[node_type].each do |node|&lt;br /&gt;
+ tmp_res.each do |child|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
eval() executes a string of characters as code. eval() is used in situations where the string contents are not known beforehand or even when the string is generated dynamically. Basically, when eval() is called , it starts a compiler to translate the string. This is detrimental especially when eval() is called on a string submitted by or modifiable by the user. Imagine if the string contains an OS call like rm -rf. But , it is perfectly safe to use eval() on strings , if they are known to be constrained. This problem is analogous to SQL injection.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- for node in childNodes&lt;br /&gt;
-      fnode = eval(params[:reactParams][:nodeType]).new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
+    fnode = (params[:reactParams][:nodeType]).constantize.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
`===` has been replaced by `==` in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- tmpObject[&amp;quot;private&amp;quot;] = node.get_instructor_id === session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  &amp;quot;private&amp;quot; =&amp;gt; node.get_instructor_id == session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
Very long lines needs to be made short so that it is more readable, which was done in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- available_condition_2 = session[:user].role_id == 6 and Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def is_current_user_ta?(instructor_id, child)&lt;br /&gt;
+    # instructor created the course, current user is the ta of this course.&lt;br /&gt;
+    session[:user].role_id == 6 and&lt;br /&gt;
+        Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related  Rspec tests. We have improved and expanded the use of RESTful and DRY design choices, and overall improved the quality and efficiency of the Expertiza codebase. We have fixed all the issues detected by Code Climate Chrome Extension and refactored the code to make sure it followed good ruby practices and in the end were able to improve the Code Climate score from F to A while not breaking any of the  Rspec tests related.&lt;br /&gt;
&lt;br /&gt;
From:&lt;br /&gt;
[[File:FGrade.png]]&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
[[File:AGrade.png]]&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:AGrade.png&amp;diff=103827</id>
		<title>File:AGrade.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:AGrade.png&amp;diff=103827"/>
		<updated>2016-10-29T03:50:32Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:FGrade.png&amp;diff=103826</id>
		<title>File:FGrade.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:FGrade.png&amp;diff=103826"/>
		<updated>2016-10-29T03:50:18Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1645._Refactoring_Tree_Display_Controller&amp;diff=103703</id>
		<title>CSC/ECE 517 Fall 2016/E1645. Refactoring Tree Display Controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1645._Refactoring_Tree_Display_Controller&amp;diff=103703"/>
		<updated>2016-10-29T02:44:38Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Copying from old page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1645: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the code DRY, similar code was moved to a new function, and that was called from the remaining part of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Questionnaires')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Metareview')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Teammate Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to author feedbacks&lt;br /&gt;
  def goto_author_feedbacks&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Author Feedback')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def goto_controller(name_parameter)&lt;br /&gt;
    node_object = TreeFolder.find_by(name: name_parameter)&lt;br /&gt;
    session[:root] = FolderNode.find_by(node_object_id: node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to questionnaires&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    goto_controller('Questionnaires')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    goto_controller('Review')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    goto_controller('Metareview')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    goto_controller('Teammate Review')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def children_node_ng&lt;br /&gt;
    child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
    tmp_res = {}&lt;br /&gt;
    child_nodes.each do |node|&lt;br /&gt;
      initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
    end&lt;br /&gt;
    # res = res_node_for_child(tmp_res)&lt;br /&gt;
    res = res_node_for_child(tmp_res)&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { render json: res }&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes`.==&lt;br /&gt;
Following were removed from the two places:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
222 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- childNodes = {}&lt;br /&gt;
- tmpRes = {}&lt;br /&gt;
- nodeType = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
+ tmp_res = {}&lt;br /&gt;
+ node_type = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
The following for loops were replaced by each, as follows:&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- 143    for node in childNodes&lt;br /&gt;
- 146    for a in node&lt;br /&gt;
- 159    for nodeType in tmpRes.keys&lt;br /&gt;
- 162    for node in tmpRes[nodeType]&lt;br /&gt;
- 238   for child in tmpRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes.each do |node|&lt;br /&gt;
+ node.each do |a|&lt;br /&gt;
+ tmp_res.keys.each do |node_type|&lt;br /&gt;
+ tmp_res[node_type].each do |node|&lt;br /&gt;
+ tmp_res.each do |child|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
eval() executes a string of characters as code. eval() is used in situations where the string contents are not known beforehand or even when the string is generated dynamically. Basically, when eval() is called , it starts a compiler to translate the string. This is detrimental especially when eval() is called on a string submitted by or modifiable by the user. Imagine if the string contains an OS call like rm -rf. But , it is perfectly safe to use eval() on strings , if they are known to be constrained. This problem is analogous to SQL injection.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- for node in childNodes&lt;br /&gt;
-      fnode = eval(params[:reactParams][:nodeType]).new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
+    fnode = (params[:reactParams][:nodeType]).constantize.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
`===` has been replaced by `==` in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- tmpObject[&amp;quot;private&amp;quot;] = node.get_instructor_id === session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  &amp;quot;private&amp;quot; =&amp;gt; node.get_instructor_id == session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
Very long lines needs to be made short so that it is more readable, which was done in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- available_condition_2 = session[:user].role_id == 6 and Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def is_current_user_ta?(instructor_id, child)&lt;br /&gt;
+    # instructor created the course, current user is the ta of this course.&lt;br /&gt;
+    session[:user].role_id == 6 and&lt;br /&gt;
+        Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related  Rspec tests. We have improved and expanded the use of RESTful and DRY design choices, and overall improved the quality and efficiency of the Expertiza codebase. We have fixed all the issues detected by Code Climate Chrome Extension and refactored the code to make sure it followed good ruby practices and in the end were able to improve the Code Climate score from F to A while not breaking any of the  Rspec tests related.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103211</id>
		<title>E1645</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103211"/>
		<updated>2016-10-28T22:39:29Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Final code updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1645: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the code DRY, similar code was moved to a new function, and that was called from the remaining part of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Questionnaires')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Metareview')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Teammate Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to author feedbacks&lt;br /&gt;
  def goto_author_feedbacks&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Author Feedback')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def goto_controller(name_parameter)&lt;br /&gt;
    node_object = TreeFolder.find_by(name: name_parameter)&lt;br /&gt;
    session[:root] = FolderNode.find_by(node_object_id: node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to questionnaires&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    goto_controller('Questionnaires')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    goto_controller('Review')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    goto_controller('Metareview')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    goto_controller('Teammate Review')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def children_node_ng&lt;br /&gt;
    child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
    tmp_res = {}&lt;br /&gt;
    child_nodes.each do |node|&lt;br /&gt;
      initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
    end&lt;br /&gt;
    # res = res_node_for_child(tmp_res)&lt;br /&gt;
    res = res_node_for_child(tmp_res)&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { render json: res }&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes`.==&lt;br /&gt;
Following were removed from the two places:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
222 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- childNodes = {}&lt;br /&gt;
- tmpRes = {}&lt;br /&gt;
- nodeType = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
+ tmp_res = {}&lt;br /&gt;
+ node_type = child.type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
The following for loops were replaced by each, as follows:&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- 143    for node in childNodes&lt;br /&gt;
- 146    for a in node&lt;br /&gt;
- 159    for nodeType in tmpRes.keys&lt;br /&gt;
- 162    for node in tmpRes[nodeType]&lt;br /&gt;
- 238   for child in tmpRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes.each do |node|&lt;br /&gt;
+ node.each do |a|&lt;br /&gt;
+ tmp_res.keys.each do |node_type|&lt;br /&gt;
+ tmp_res[node_type].each do |node|&lt;br /&gt;
+ tmp_res.each do |child|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
eval() executes a string of characters as code. eval() is used in situations where the string contents are not known beforehand or even when the string is generated dynamically. Basically, when eval() is called , it starts a compiler to translate the string. This is detrimental especially when eval() is called on a string submitted by or modifiable by the user. Imagine if the string contains an OS call like rm -rf. But , it is perfectly safe to use eval() on strings , if they are known to be constrained. This problem is analogous to SQL injection.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- for node in childNodes&lt;br /&gt;
-      fnode = eval(params[:reactParams][:nodeType]).new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
+    fnode = (params[:reactParams][:nodeType]).constantize.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
`===` has been replaced by `==` in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- tmpObject[&amp;quot;private&amp;quot;] = node.get_instructor_id === session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  &amp;quot;private&amp;quot; =&amp;gt; node.get_instructor_id == session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
Very long lines needs to be made short so that it is more readable, which was done in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- available_condition_2 = session[:user].role_id == 6 and Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def is_current_user_ta?(instructor_id, child)&lt;br /&gt;
+    # instructor created the course, current user is the ta of this course.&lt;br /&gt;
+    session[:user].role_id == 6 and&lt;br /&gt;
+        Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Future Considerations=&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related  Rspec tests. We have improved and expanded the use of RESTful and DRY design choices, and overall improved the quality and efficiency of the Expertiza codebase. We have fixed all the issues detected by Code Climate Chrome Extension and refactored the code to make sure it followed good ruby practices and in the end were able to improve the Code Climate score from F to A while not breaking any of the  Rspec tests related.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103195</id>
		<title>E1645</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103195"/>
		<updated>2016-10-28T22:31:12Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: More code updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1645: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the code DRY, similar code was moved to a new function, and that was called from the remaining part of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Questionnaires')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Metareview')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Teammate Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to author feedbacks&lt;br /&gt;
  def goto_author_feedbacks&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Author Feedback')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def goto_controller(name_parameter)&lt;br /&gt;
    node_object = TreeFolder.find_by(name: name_parameter)&lt;br /&gt;
    session[:root] = FolderNode.find_by(node_object_id: node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to questionnaires&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    goto_controller('Questionnaires')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    goto_controller('Review')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    goto_controller('Metareview')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    goto_controller('Teammate Review')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def children_node_ng&lt;br /&gt;
    child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
    tmp_res = {}&lt;br /&gt;
    child_nodes.each do |node|&lt;br /&gt;
      initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
    end&lt;br /&gt;
    # res = res_node_for_child(tmp_res)&lt;br /&gt;
    res = res_node_for_child(tmp_res)&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { render json: res }&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes`.==&lt;br /&gt;
Following were removed from the two places:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
222 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- childNodes = {}&lt;br /&gt;
- tmpRes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
+ tmp_res = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
For was replace by each, as follows:&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
eval() executes a string of characters as code. eval() is used in situations where the string contents are not known beforehand or even when the string is generated dynamically. Basically, when eval() is called , it starts a compiler to translate the string. This is detrimental especially when eval() is called on a string submitted by or modifiable by the user. Imagine if the string contains an OS call like rm -rf. But , it is perfectly safe to use eval() on strings , if they are known to be constrained. This problem is analogous to SQL injection.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- for node in childNodes&lt;br /&gt;
-      fnode = eval(params[:reactParams][:nodeType]).new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
+    fnode = (params[:reactParams][:nodeType]).constantize.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
`===` has been replaced by `==` in the following manner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- tmpObject[&amp;quot;private&amp;quot;] = node.get_instructor_id === session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  &amp;quot;private&amp;quot; =&amp;gt; node.get_instructor_id == session[:user].id ? true : false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tmpObject[&amp;quot;is_available&amp;quot;] = is_available(session[:user], instructor_id) || (session[:user].role.ta? &amp;amp;&amp;amp; Ta.get_my_instructors(session[:user].id).include?(instructor_id) &amp;amp;&amp;amp; ta_for_current_course?(node))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- available_condition_2 = session[:user].role_id == 6 and Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def is_current_user_ta?(instructor_id, child)&lt;br /&gt;
+    # instructor created the course, current user is the ta of this course.&lt;br /&gt;
+    session[:user].role_id == 6 and&lt;br /&gt;
+        Ta.get_my_instructors(session[:user].id).include?(instructor_id) and ta_for_current_course?(child)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Future Considerations=&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related  Rspec tests. We have improved and expanded the use of RESTful and DRY design choices, and overall improved the quality and efficiency of the Expertiza codebase. We have fixed all the issues detected by Code Climate Chrome Extension and refactored the code to make sure it followed good ruby practices and in the end were able to improve the Code Climate score from F to A while not breaking any of the  Rspec tests related.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103167</id>
		<title>E1645</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103167"/>
		<updated>2016-10-28T22:15:21Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Replacing code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1645: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the code DRY, similar code was moved to a new function, and that was called from the remaining part of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Questionnaires')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Metareview')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Teammate Review')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to author feedbacks&lt;br /&gt;
  def goto_author_feedbacks&lt;br /&gt;
    node_object = TreeFolder.find_by_name('Author Feedback')&lt;br /&gt;
    session[:root] = FolderNode.find_by_node_object_id(node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def goto_controller(name_parameter)&lt;br /&gt;
    node_object = TreeFolder.find_by(name: name_parameter)&lt;br /&gt;
    session[:root] = FolderNode.find_by(node_object_id: node_object.id).id&lt;br /&gt;
    redirect_to controller: 'tree_display', action: 'list'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to questionnaires&lt;br /&gt;
  def goto_questionnaires&lt;br /&gt;
    goto_controller('Questionnaires')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to review rubrics&lt;br /&gt;
  def goto_review_rubrics&lt;br /&gt;
    goto_controller('Review')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to metareview rubrics&lt;br /&gt;
  def goto_metareview_rubrics&lt;br /&gt;
    goto_controller('Metareview')&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # direct access to teammate review rubrics&lt;br /&gt;
  def goto_teammatereview_rubrics&lt;br /&gt;
    goto_controller('Teammate Review')&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def children_node_ng&lt;br /&gt;
    child_nodes = child_nodes_from_params(params[:reactParams][:child_nodes])&lt;br /&gt;
    tmp_res = {}&lt;br /&gt;
    child_nodes.each do |node|&lt;br /&gt;
      initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
    end&lt;br /&gt;
    # res = res_node_for_child(tmp_res)&lt;br /&gt;
    res = res_node_for_child(tmp_res)&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html { render json: res }&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes` were removed from following two places.==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
222 -  childNodes = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
eval() executes a string of characters as code. eval() is used in situations where the string contents are not known beforehand or even when the string is generated dynamically. Basically, when eval() is called , it starts a compiler to translate the string. This is detrimental especially when eval() is called on a string submitted by or modifiable by the user. Imagine if the string contains an OS call like rm -rf. But , it is perfectly safe to use eval() on strings , if they are known to be constrained. This problem is analogous to SQL injection.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- for node in childNodes&lt;br /&gt;
-      fnode = eval(params[:reactParams][:nodeType]).new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+  def initialize_fnode_update_children(params, node, tmp_res)&lt;br /&gt;
+    fnode = (params[:reactParams][:nodeType]).constantize.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
[[File:8_1_before.png]]&lt;br /&gt;
&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:8_1_after.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:8_2_before.png]]&lt;br /&gt;
&lt;br /&gt;
Changed to ==&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:8_2_after.png|upright=1.5]]&lt;br /&gt;
&lt;br /&gt;
=Future Considerations=&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related  Rspec tests. We have improved and expanded the use of RESTful and DRY design choices, and overall improved the quality and efficiency of the Expertiza codebase. We have fixed all the issues detected by Code Climate Chrome Extension and refactored the code to make sure it followed good ruby practices and in the end were able to improve the Code Climate score from F to A while not breaking any of the  Rspec tests related.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103071</id>
		<title>E1645</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1645&amp;diff=103071"/>
		<updated>2016-10-28T21:36:43Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Created page with &amp;quot;= '''E1463: Refactoring TreeDisplayController''' =  __TOC__  =Project Links= [https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt; [https://github.com/expertiza/expertiza/pull...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1463: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the codebase more [http://www.restapitutorial.com/lessons/whatisrest.html RESTful], we have replaced all the controller action redirections with a tree_display_index_path which enormously reduces the code content and as well as provides an organized approach to action redirections. &lt;br /&gt;
&lt;br /&gt;
[[File:1_before.png]]&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
[[File:1_after.png]]&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. &lt;br /&gt;
The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2.png]]&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes` were removed from following two places.==&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Future Considerations=&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related controllers and views. We improved and expanded the use of RESTful and DRY design choices, implemented the use of routing helpers, ensured that instantiation of instance variables is minimized, and overall improved the quality and efficiency of the Expertiza codebase.  We also discovered a number of potential issues and additional areas for improvement.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ScreenShotOODD.png&amp;diff=103064</id>
		<title>File:ScreenShotOODD.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ScreenShotOODD.png&amp;diff=103064"/>
		<updated>2016-10-28T21:32:58Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1463: Refactoring TreeDisplayController''' =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Project Links=&lt;br /&gt;
[https://github.com/expertiza/expertiza Github Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/744 Expertize Pull Request] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://travis-ci.org/expertiza/expertiza/builds/171173212 Travis CI Test Cases Passes] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup - How To View Our Expertiza Fork Running on AWS=&lt;br /&gt;
NOTE: The scope of our project was only to refactor select code. There are no feature additions or changes, so it should work just like production Expertiza.&lt;br /&gt;
&lt;br /&gt;
1) Go to [http://ec2-54-186-80-176.us-west-2.compute.amazonaws.com:3000/ our Expertiza project running on AWS]&lt;br /&gt;
&lt;br /&gt;
2) Login as Admin&amp;lt;br&amp;gt;&lt;br /&gt;
'''User:''' user2&amp;lt;br&amp;gt;&lt;br /&gt;
'''Password:''' password&lt;br /&gt;
&lt;br /&gt;
3) Click on &amp;quot;Manage...&amp;quot; if you are not automatically directed to the tree display.&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
For this project, our team refactored the TreeDisplayController class in the [http://expertiza.ncsu.edu/ Expertiza] OSS project. This class provides access to questionnaires, review rubrics, author feedback, courses, assignments, and course evaluations. The tree display lists all of these categories with the ability for the user to &amp;quot;drill down&amp;quot; into the subcategories or just expand/collapse as needed.&lt;br /&gt;
&lt;br /&gt;
=Refactoring TreeDisplayController Issues=&lt;br /&gt;
&lt;br /&gt;
As part of the refactoring task, we had to resolve the following issues for enhancing code readability and maintainability. The tasks included:&lt;br /&gt;
&lt;br /&gt;
#Similar code found in other locations.&lt;br /&gt;
#Cyclomatic and Perceived complexity for get_children_node_ng is too high.&lt;br /&gt;
#Useless assignment to variable - `childNodes`.&lt;br /&gt;
#Use snake_case for variable names.&lt;br /&gt;
#Prefer `each` over `for`.&lt;br /&gt;
#The use of `eval` is a serious security risk.&lt;br /&gt;
#Avoid the use of the case equality operator `===`.&lt;br /&gt;
#Line is too long.&lt;br /&gt;
#`end` at 334, 2 is not aligned with `class` at 1, 0.&lt;br /&gt;
&lt;br /&gt;
==1) Similar code found in other locations==&lt;br /&gt;
&lt;br /&gt;
In order to make the codebase more [http://www.restapitutorial.com/lessons/whatisrest.html RESTful], we have replaced all the controller action redirections with a tree_display_index_path which enormously reduces the code content and as well as provides an organized approach to action redirections. &lt;br /&gt;
&lt;br /&gt;
[[File:1_before.png]]&lt;br /&gt;
&lt;br /&gt;
Changed to ⇒&lt;br /&gt;
&lt;br /&gt;
[[File:1_after.png]]&lt;br /&gt;
&lt;br /&gt;
==2) Cyclomatic and Perceived complexity for get_children_node_ng is too high==&lt;br /&gt;
By creating two separate functions child_nodes_from_params  and initialize_fnode_update_children, the complexity for this function was reduced. &lt;br /&gt;
The initialize_fnode_update_children function was in-turn sub-functioned into update_fnode_children which updated the children nodes.&lt;br /&gt;
The new function looks like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2.png]]&lt;br /&gt;
&lt;br /&gt;
==3) Useless assignment to variable - `childNodes` were removed from following two places.==&lt;br /&gt;
&lt;br /&gt;
==4) Use snake_case for variable names.==&lt;br /&gt;
Variable names using camelCase were renamed to use snake_case as according to ruby coding guidelines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==5) Prefer `each` over `for`==&lt;br /&gt;
&lt;br /&gt;
==6)The use of `eval` is a serious security risk.==&lt;br /&gt;
==7) Avoid the use of the case equality operator `===`.==&lt;br /&gt;
&lt;br /&gt;
has been changed to  ⇒&lt;br /&gt;
&lt;br /&gt;
==8) Line is too long.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Future Considerations=&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
In conclusion, we were able to successfully refactor the tree_display_controller and related controllers and views. We improved and expanded the use of RESTful and DRY design choices, implemented the use of routing helpers, ensured that instantiation of instance variables is minimized, and overall improved the quality and efficiency of the Expertiza codebase.  We also discovered a number of potential issues and additional areas for improvement.&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ScreenShotOODD.png&amp;diff=103018</id>
		<title>File:ScreenShotOODD.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ScreenShotOODD.png&amp;diff=103018"/>
		<updated>2016-10-28T21:01:37Z</updated>

		<summary type="html">&lt;p&gt;Bkasliw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bkasliw</name></author>
	</entry>
</feed>