<?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=Ctsui</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=Ctsui"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Ctsui"/>
	<updated>2026-05-30T05:12:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75154</id>
		<title>CSC/ECE 517 Spring 2013/FINAL PROJECT E736 UNDO DELIVERABLE</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75154"/>
		<updated>2013-04-23T18:19:55Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* List of Items Now Supported by Undo Functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= E736. Undo Functionality for Expertiza =&lt;br /&gt;
*Contacts: Ed Gehringer (efg@ncsu.edu) and Andrew Kofink (ajkofink@ncsu.edu)&lt;br /&gt;
*[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO Design Document]&lt;br /&gt;
*[https://docs.google.com/a/ncsu.edu/document/d/11YTjxFXFR13vJ769yFBbqn9qOueK2Ktz0Pd-gyS2W5U/ Project Description Doc]&lt;br /&gt;
== Team Members ==&lt;br /&gt;
*Chun Sing Tsui (ctsui@ncsu.edu)&lt;br /&gt;
*Kenny Yarboro (kbyarbor@ncsu.edu)&lt;br /&gt;
*Meng Cao (mcao2@ncsu.edu)&lt;br /&gt;
*Travis Folsom (twfolsom@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Project Deliverables ==&lt;br /&gt;
&lt;br /&gt;
=== Screencast Video Overview ===&lt;br /&gt;
A video overview of the project was created via [http://www.screencast-o-matic.com/ Screencast-O-Matic] and can be found [http://www.youtube.com/watch?v=1DYS5InjBOk here].  &lt;br /&gt;
&lt;br /&gt;
=== Overview of Undo Functionality ===&lt;br /&gt;
*Undo allows the user to undo their most recent actions for any items that offer the undo functionality.  &lt;br /&gt;
*The undo of file submissions was not required; it is not implemented in this project.&lt;br /&gt;
*If an undo is attempted on an item already modified by another user, a message is displayed stating why undo cannot be performed.  Otherwise, the user is able to undo any changes to an item with the undo functionality.  &lt;br /&gt;
*When multiple actions are performed in one step, the undo functionality groups all of the changes together for the purposes of restoring all items affected by the action previously performed.&lt;br /&gt;
&lt;br /&gt;
=== List of Items Now Supported by Undo Functionality === &lt;br /&gt;
*Add Signup Sheet&lt;br /&gt;
**Delete Topic&lt;br /&gt;
**Edit Topic&lt;br /&gt;
**New Topic&lt;br /&gt;
*Assignments&lt;br /&gt;
**Add/Remove Participants&lt;br /&gt;
**Inherit Participants from Course&lt;br /&gt;
**Copy Participants to Course&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Courses&lt;br /&gt;
**Add Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
**Toggle Private/Public&lt;br /&gt;
*Import&lt;br /&gt;
**Import Participants&lt;br /&gt;
**Import Teams&lt;br /&gt;
**Import Users&lt;br /&gt;
*Student Actions&lt;br /&gt;
**Create Team&lt;br /&gt;
**Edit Team Name&lt;br /&gt;
**Leave Team&lt;br /&gt;
**Submit Hyperlink&lt;br /&gt;
*Questions&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Questionnaires&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Teams&lt;br /&gt;
**Add&lt;br /&gt;
**Create (Manual)&lt;br /&gt;
**Create (Random)&lt;br /&gt;
**Delete&lt;br /&gt;
**Delete All Teams&lt;br /&gt;
**Edit&lt;br /&gt;
&lt;br /&gt;
=== Redo Functionality ===&lt;br /&gt;
In addition to the Undo functionality being added, the ability to Redo an undone action is also implemented.  Whenever an Undo is performed, the user is given an option to Redo the action that was undone.  Whenever a Redo is performed, the user is given an option to Undo the action again.  &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns and Designs ===&lt;br /&gt;
*DRY&lt;br /&gt;
**&amp;quot;Don't Repeat Yourself&amp;quot; practice was followed. &lt;br /&gt;
**The app/controllers/application_controller.rb file contains all of the Undo functionality code for Expertiza.  All other controllers are able to call the necessary undo-related methods to enable the Undo functionality.&lt;br /&gt;
&lt;br /&gt;
=== Framework Leveraged &amp;amp; Enhanced ===&lt;br /&gt;
*Paper Trail(https://github.com/airblade/paper_trail)&lt;br /&gt;
**Paper Trail allows for tracking changes to model data. &lt;br /&gt;
***Good for auditing or versioning. &lt;br /&gt;
**Offers many functionalities including:&lt;br /&gt;
****Viewing a model at any stage in its lifecycle. &lt;br /&gt;
****Reverting a model to any version.&lt;br /&gt;
****Undeleting items after they have been destroyed.&lt;br /&gt;
**Compatible with Rails-2.3.15, which is the version Expertiza uses. &lt;br /&gt;
**There is a [http://railscasts.com/episodes/255-undo-with-paper-trail Railscast] showing how to implement the undo feature with Paper Trail. &lt;br /&gt;
**Ranked as the most popular framework for Active Record versioning feature in [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here]&lt;br /&gt;
*Enhancement&lt;br /&gt;
**Paper Trail only supported undo of the most recent action and did not restore associations.   &lt;br /&gt;
**Paper Trail customized to add support for restoring associations within the Expertiza system.  &lt;br /&gt;
***Database transactions paired with timestamps and user ids to group them together.&lt;br /&gt;
&lt;br /&gt;
=== Classes Modified ===&lt;br /&gt;
*apps/&lt;br /&gt;
**controllers/&lt;br /&gt;
***application_controller.rb&lt;br /&gt;
***assignment_controller.rb&lt;br /&gt;
***course_controller.rb&lt;br /&gt;
***import_file_controller.rb&lt;br /&gt;
***participants_controller.rb&lt;br /&gt;
***sign_up_sheet_controller.rb&lt;br /&gt;
***student_team_controller.rb&lt;br /&gt;
***team_controller.rb&lt;br /&gt;
***teams_users_controller.rb&lt;br /&gt;
***versions_controller.rb&lt;br /&gt;
**models/&lt;br /&gt;
***assignment_participant.rb&lt;br /&gt;
***course.rb&lt;br /&gt;
***participant.rb&lt;br /&gt;
***sign_up_topic.rb&lt;br /&gt;
***ta_mapping.rb&lt;br /&gt;
***team_node.rb&lt;br /&gt;
***teams_user.rb&lt;br /&gt;
&lt;br /&gt;
=== Unit &amp;amp; Functional Tests ===&lt;br /&gt;
The implementation of the Undo functionality did not afford any testing opportunities applicable to unit or functional tests.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes &amp;amp; Other Improvements ===&lt;br /&gt;
The following bugs were found within Expertiza and fixed:&lt;br /&gt;
*ApplicationController enhanced to rescue from ActiveRecord::RecordNotFound errors and redirect to tree display.  &lt;br /&gt;
*Copy of Assignment opened Edit page for the original Assignment and now correctly opens the Edit page for the copy of the assignment.  &lt;br /&gt;
&lt;br /&gt;
The following general improvements were made:&lt;br /&gt;
*Explicitly declared the has_one association between each object and its tree node to eliminate the manual deletion of a related tree node with the object.   &lt;br /&gt;
*Edited the Copy of Course flash message to be more clear that the copy had already been created and to resolve a misspelling.&lt;br /&gt;
&lt;br /&gt;
=== Problem Areas with Expertiza ===&lt;br /&gt;
There were some areas of functionality within Expertiza that did not work.  There were some cases in which the undo functionality could not be added due to the inherent problems.  These problem areas were:&lt;br /&gt;
*Assigning surveys in an assignment.&lt;br /&gt;
*Dates in assignments do not show up when the assignment is edited.   &lt;br /&gt;
*Unable to assign random reviewers. &lt;br /&gt;
*Unable to edit advice for questions in questionnaire. &lt;br /&gt;
*Unable to remove participants from a course.&lt;br /&gt;
*Unable to inherit team from a course&lt;br /&gt;
&lt;br /&gt;
=== Future Recommendations ===&lt;br /&gt;
*Add integration tests. &lt;br /&gt;
*Add undo functionality to other areas of Expertiza (especially student actions such as review responses)&lt;br /&gt;
*Determine appropriate methodology for cleaning up Versions table.&lt;br /&gt;
&lt;br /&gt;
=== Template to Implement Undo Functionality ===&lt;br /&gt;
* Install paper_trail gem. Please follow the steps listed on its [https://github.com/airblade/paper_trail official webpage ]. &lt;br /&gt;
* Add ''has_paper_trail'' to the model you want to have undo functionality&lt;br /&gt;
 class Foo &amp;lt; ActiveRecord::Base&lt;br /&gt;
     has_paper_trail&lt;br /&gt;
     ...&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
* Call ''undo_link'' method in the corresponding controller. The argument is a string, which you want to show along with the undo link in flash[:note]. The following is code snippet shows how the undo functionality is implemented for the delete method of FoosController&lt;br /&gt;
 class FoosController &amp;lt; ApplicationController&lt;br /&gt;
     def delete&lt;br /&gt;
         @foo = Foo.find(params[:id])&lt;br /&gt;
         @foo.destroy&lt;br /&gt;
         undo_link(&amp;quot;Foo \&amp;quot;#{@foo.name}\&amp;quot; has been deleted successfully. &amp;quot;)&lt;br /&gt;
         redirect_to :back&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75129</id>
		<title>CSC/ECE 517 Spring 2013/FINAL PROJECT E736 UNDO DELIVERABLE</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75129"/>
		<updated>2013-04-23T00:20:30Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Future Recommendations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= E736. Undo Functionality for Expertiza =&lt;br /&gt;
*Contacts: Ed Gehringer (efg@ncsu.edu) and Andrew Kofink (ajkofink@ncsu.edu)&lt;br /&gt;
*[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO Design Document]&lt;br /&gt;
*[https://docs.google.com/a/ncsu.edu/document/d/11YTjxFXFR13vJ769yFBbqn9qOueK2Ktz0Pd-gyS2W5U/ Project Description Doc]&lt;br /&gt;
== Team Members ==&lt;br /&gt;
*Chun Sing Tsui (ctsui@ncsu.edu)&lt;br /&gt;
*Kenny Yarboro (kbyarbor@ncsu.edu)&lt;br /&gt;
*Meng Cao (mcao2@ncsu.edu)&lt;br /&gt;
*Travis Folsom (twfolsom@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Project Deliverables ==&lt;br /&gt;
&lt;br /&gt;
=== Screencast Video Overview ===&lt;br /&gt;
A video overview of the project was created via [http://www.screencast-o-matic.com/ Screencast-O-Matic] and can be found [http://www.youtube.com/watch?v=1DYS5InjBOk here].  &lt;br /&gt;
&lt;br /&gt;
=== Overview of Undo Functionality ===&lt;br /&gt;
*Undo allows the user to undo their most recent actions for any items that offer the undo functionality.  &lt;br /&gt;
*The undo of file submissions was not required; it is not implemented in this project.&lt;br /&gt;
*If an undo is attempted on an item already modified by another user, a message is displayed stating why undo cannot be performed.  Otherwise, the user is able to undo any changes to an item with the undo functionality.  &lt;br /&gt;
*When multiple actions are performed in one step, the undo functionality groups all of the changes together for the purposes of restoring all items affected by the action previously performed.&lt;br /&gt;
&lt;br /&gt;
=== List of Items Now Supported by Undo Functionality === &lt;br /&gt;
*Add Signup Sheet&lt;br /&gt;
**Delete Topic&lt;br /&gt;
**Edit Topic&lt;br /&gt;
**New Topic&lt;br /&gt;
*Assignments&lt;br /&gt;
**Add/Remove Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Courses&lt;br /&gt;
**Add Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
**Toggle Private/Public&lt;br /&gt;
*Import&lt;br /&gt;
**Import Participants&lt;br /&gt;
**Import Teams&lt;br /&gt;
**Import Users&lt;br /&gt;
*Student Actions&lt;br /&gt;
**Create Team&lt;br /&gt;
**Edit Team Name&lt;br /&gt;
**Leave Team&lt;br /&gt;
**Submit Hyperlink&lt;br /&gt;
*Questions&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Questionnaires&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Teams&lt;br /&gt;
**Add&lt;br /&gt;
**Create (Manual)&lt;br /&gt;
**Create (Random)&lt;br /&gt;
**Delete&lt;br /&gt;
**Delete All Teams&lt;br /&gt;
**Edit&lt;br /&gt;
&lt;br /&gt;
=== Redo Functionality ===&lt;br /&gt;
In addition to the Undo functionality being added, the ability to Redo an undone action is also implemented.  Whenever an Undo is performed, the user is given an option to Redo the action that was undone.  Whenever a Redo is performed, the user is given an option to Undo the action again.  &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns and Designs ===&lt;br /&gt;
*DRY&lt;br /&gt;
**&amp;quot;Don't Repeat Yourself&amp;quot; practice was followed. &lt;br /&gt;
**The app/controllers/application_controller.rb file contains all of the Undo functionality code for Expertiza.  All other controllers are able to call the necessary undo-related methods to enable the Undo functionality.&lt;br /&gt;
&lt;br /&gt;
=== Framework Leveraged &amp;amp; Enhanced ===&lt;br /&gt;
*Paper Trail(https://github.com/airblade/paper_trail)&lt;br /&gt;
**Paper Trail allows for tracking changes to model data. &lt;br /&gt;
***Good for auditing or versioning. &lt;br /&gt;
**Offers many functionalities including:&lt;br /&gt;
****Viewing a model at any stage in its lifecycle. &lt;br /&gt;
****Reverting a model to any version.&lt;br /&gt;
****Undeleting items after they have been destroyed.&lt;br /&gt;
**Compatible with Rails-2.3.15, which is the version Expertiza uses. &lt;br /&gt;
**There is a [http://railscasts.com/episodes/255-undo-with-paper-trail Railscast] showing how to implement the undo feature with Paper Trail. &lt;br /&gt;
**Ranked as the most popular framework for Active Record versioning feature in [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here]&lt;br /&gt;
*Enhancement&lt;br /&gt;
**Paper Trail only supported undo of the most recent action and did not restore associations.   &lt;br /&gt;
**Paper Trail customized to add support for restoring associations within the Expertiza system.  &lt;br /&gt;
***Database transactions paired with timestamps and user ids to group them together.&lt;br /&gt;
&lt;br /&gt;
=== Classes Modified ===&lt;br /&gt;
*apps/&lt;br /&gt;
**controllers/&lt;br /&gt;
***application_controller.rb&lt;br /&gt;
***assignment_controller.rb&lt;br /&gt;
***course_controller.rb&lt;br /&gt;
***import_file_controller.rb&lt;br /&gt;
***participants_controller.rb&lt;br /&gt;
***sign_up_sheet_controller.rb&lt;br /&gt;
***student_team_controller.rb&lt;br /&gt;
***team_controller.rb&lt;br /&gt;
***teams_users_controller.rb&lt;br /&gt;
***versions_controller.rb&lt;br /&gt;
**models/&lt;br /&gt;
***assignment_participant.rb&lt;br /&gt;
***course.rb&lt;br /&gt;
***participant.rb&lt;br /&gt;
***sign_up_topic.rb&lt;br /&gt;
***ta_mapping.rb&lt;br /&gt;
***team_node.rb&lt;br /&gt;
***teams_user.rb&lt;br /&gt;
&lt;br /&gt;
=== Unit &amp;amp; Functional Tests ===&lt;br /&gt;
The implementation of the Undo functionality did not afford any testing opportunities applicable to unit or functional tests.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes &amp;amp; Other Improvements ===&lt;br /&gt;
The following bugs were found within Expertiza and fixed:&lt;br /&gt;
*ApplicationController enhanced to rescue from ActiveRecord::RecordNotFound errors and redirect to tree display.  &lt;br /&gt;
*Copy of Assignment opened Edit page for the original Assignment and now correctly opens the Edit page for the copy of the assignment.  &lt;br /&gt;
&lt;br /&gt;
The following general improvements were made:&lt;br /&gt;
*Explicitly declared the has_one association between each object and its tree node to eliminate the manual deletion of a related tree node with the object.   &lt;br /&gt;
*Edited the Copy of Course flash message to be more clear that the copy had already been created and to resolve a misspelling.&lt;br /&gt;
&lt;br /&gt;
=== Problem Areas with Expertiza ===&lt;br /&gt;
There were some areas of functionality within Expertiza that did not work.  There were some cases in which the undo functionality could not be added due to the inherent problems.  These problem areas were:&lt;br /&gt;
*Assigning surveys in an assignment.&lt;br /&gt;
*Dates in assignments do not show up when the assignment is edited.   &lt;br /&gt;
*Unable to assign random reviewers. &lt;br /&gt;
*Unable to edit advice for questions in questionnaire. &lt;br /&gt;
*Unable to remove participants from a course.&lt;br /&gt;
*Unable to inherit team from a course&lt;br /&gt;
&lt;br /&gt;
=== Future Recommendations ===&lt;br /&gt;
*Add integration tests. &lt;br /&gt;
*Add undo functionality to other areas of Expertiza (especially student actions such as review responses)&lt;br /&gt;
*Determine appropriate methodology for cleaning up Versions table.&lt;br /&gt;
&lt;br /&gt;
=== Template to Implement Undo Functionality ===&lt;br /&gt;
* Install paper_trail gem. Please follow the steps listed on its [https://github.com/airblade/paper_trail official webpage ]. &lt;br /&gt;
* Add ''has_paper_trail'' to the model you want to have undo functionality&lt;br /&gt;
 class Foo &amp;lt; ActiveRecord::Base&lt;br /&gt;
     has_paper_trail&lt;br /&gt;
     ...&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
* Call ''undo_link'' method in the corresponding controller. The argument is a string, which you want to show along with the undo link in flash[:note]. The following is code snippet shows how the undo functionality is implemented for the delete method of FoosController&lt;br /&gt;
 class FoosController &amp;lt; ApplicationController&lt;br /&gt;
     def delete&lt;br /&gt;
         @foo = Foo.find(params[:id])&lt;br /&gt;
         @foo.destroy&lt;br /&gt;
         undo_link(&amp;quot;Foo \&amp;quot;#{@foo.name}\&amp;quot; has been deleted successfully. &amp;quot;)&lt;br /&gt;
         redirect_to :back&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75128</id>
		<title>CSC/ECE 517 Spring 2013/FINAL PROJECT E736 UNDO DELIVERABLE</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75128"/>
		<updated>2013-04-23T00:17:28Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Overview of Undo Functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= E736. Undo Functionality for Expertiza =&lt;br /&gt;
*Contacts: Ed Gehringer (efg@ncsu.edu) and Andrew Kofink (ajkofink@ncsu.edu)&lt;br /&gt;
*[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO Design Document]&lt;br /&gt;
*[https://docs.google.com/a/ncsu.edu/document/d/11YTjxFXFR13vJ769yFBbqn9qOueK2Ktz0Pd-gyS2W5U/ Project Description Doc]&lt;br /&gt;
== Team Members ==&lt;br /&gt;
*Chun Sing Tsui (ctsui@ncsu.edu)&lt;br /&gt;
*Kenny Yarboro (kbyarbor@ncsu.edu)&lt;br /&gt;
*Meng Cao (mcao2@ncsu.edu)&lt;br /&gt;
*Travis Folsom (twfolsom@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Project Deliverables ==&lt;br /&gt;
&lt;br /&gt;
=== Screencast Video Overview ===&lt;br /&gt;
A video overview of the project was created via [http://www.screencast-o-matic.com/ Screencast-O-Matic] and can be found [http://www.youtube.com/watch?v=1DYS5InjBOk here].  &lt;br /&gt;
&lt;br /&gt;
=== Overview of Undo Functionality ===&lt;br /&gt;
*Undo allows the user to undo their most recent actions for any items that offer the undo functionality.  &lt;br /&gt;
*The undo of file submissions was not required; it is not implemented in this project.&lt;br /&gt;
*If an undo is attempted on an item already modified by another user, a message is displayed stating why undo cannot be performed.  Otherwise, the user is able to undo any changes to an item with the undo functionality.  &lt;br /&gt;
*When multiple actions are performed in one step, the undo functionality groups all of the changes together for the purposes of restoring all items affected by the action previously performed.&lt;br /&gt;
&lt;br /&gt;
=== List of Items Now Supported by Undo Functionality === &lt;br /&gt;
*Add Signup Sheet&lt;br /&gt;
**Delete Topic&lt;br /&gt;
**Edit Topic&lt;br /&gt;
**New Topic&lt;br /&gt;
*Assignments&lt;br /&gt;
**Add/Remove Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Courses&lt;br /&gt;
**Add Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
**Toggle Private/Public&lt;br /&gt;
*Import&lt;br /&gt;
**Import Participants&lt;br /&gt;
**Import Teams&lt;br /&gt;
**Import Users&lt;br /&gt;
*Student Actions&lt;br /&gt;
**Create Team&lt;br /&gt;
**Edit Team Name&lt;br /&gt;
**Leave Team&lt;br /&gt;
**Submit Hyperlink&lt;br /&gt;
*Questions&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Questionnaires&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Teams&lt;br /&gt;
**Add&lt;br /&gt;
**Create (Manual)&lt;br /&gt;
**Create (Random)&lt;br /&gt;
**Delete&lt;br /&gt;
**Delete All Teams&lt;br /&gt;
**Edit&lt;br /&gt;
&lt;br /&gt;
=== Redo Functionality ===&lt;br /&gt;
In addition to the Undo functionality being added, the ability to Redo an undone action is also implemented.  Whenever an Undo is performed, the user is given an option to Redo the action that was undone.  Whenever a Redo is performed, the user is given an option to Undo the action again.  &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns and Designs ===&lt;br /&gt;
*DRY&lt;br /&gt;
**&amp;quot;Don't Repeat Yourself&amp;quot; practice was followed. &lt;br /&gt;
**The app/controllers/application_controller.rb file contains all of the Undo functionality code for Expertiza.  All other controllers are able to call the necessary undo-related methods to enable the Undo functionality.&lt;br /&gt;
&lt;br /&gt;
=== Framework Leveraged &amp;amp; Enhanced ===&lt;br /&gt;
*Paper Trail(https://github.com/airblade/paper_trail)&lt;br /&gt;
**Paper Trail allows for tracking changes to model data. &lt;br /&gt;
***Good for auditing or versioning. &lt;br /&gt;
**Offers many functionalities including:&lt;br /&gt;
****Viewing a model at any stage in its lifecycle. &lt;br /&gt;
****Reverting a model to any version.&lt;br /&gt;
****Undeleting items after they have been destroyed.&lt;br /&gt;
**Compatible with Rails-2.3.15, which is the version Expertiza uses. &lt;br /&gt;
**There is a [http://railscasts.com/episodes/255-undo-with-paper-trail Railscast] showing how to implement the undo feature with Paper Trail. &lt;br /&gt;
**Ranked as the most popular framework for Active Record versioning feature in [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here]&lt;br /&gt;
*Enhancement&lt;br /&gt;
**Paper Trail only supported undo of the most recent action and did not restore associations.   &lt;br /&gt;
**Paper Trail customized to add support for restoring associations within the Expertiza system.  &lt;br /&gt;
***Database transactions paired with timestamps and user ids to group them together.&lt;br /&gt;
&lt;br /&gt;
=== Classes Modified ===&lt;br /&gt;
*apps/&lt;br /&gt;
**controllers/&lt;br /&gt;
***application_controller.rb&lt;br /&gt;
***assignment_controller.rb&lt;br /&gt;
***course_controller.rb&lt;br /&gt;
***import_file_controller.rb&lt;br /&gt;
***participants_controller.rb&lt;br /&gt;
***sign_up_sheet_controller.rb&lt;br /&gt;
***student_team_controller.rb&lt;br /&gt;
***team_controller.rb&lt;br /&gt;
***teams_users_controller.rb&lt;br /&gt;
***versions_controller.rb&lt;br /&gt;
**models/&lt;br /&gt;
***assignment_participant.rb&lt;br /&gt;
***course.rb&lt;br /&gt;
***participant.rb&lt;br /&gt;
***sign_up_topic.rb&lt;br /&gt;
***ta_mapping.rb&lt;br /&gt;
***team_node.rb&lt;br /&gt;
***teams_user.rb&lt;br /&gt;
&lt;br /&gt;
=== Unit &amp;amp; Functional Tests ===&lt;br /&gt;
The implementation of the Undo functionality did not afford any testing opportunities applicable to unit or functional tests.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes &amp;amp; Other Improvements ===&lt;br /&gt;
The following bugs were found within Expertiza and fixed:&lt;br /&gt;
*ApplicationController enhanced to rescue from ActiveRecord::RecordNotFound errors and redirect to tree display.  &lt;br /&gt;
*Copy of Assignment opened Edit page for the original Assignment and now correctly opens the Edit page for the copy of the assignment.  &lt;br /&gt;
&lt;br /&gt;
The following general improvements were made:&lt;br /&gt;
*Explicitly declared the has_one association between each object and its tree node to eliminate the manual deletion of a related tree node with the object.   &lt;br /&gt;
*Edited the Copy of Course flash message to be more clear that the copy had already been created and to resolve a misspelling.&lt;br /&gt;
&lt;br /&gt;
=== Problem Areas with Expertiza ===&lt;br /&gt;
There were some areas of functionality within Expertiza that did not work.  There were some cases in which the undo functionality could not be added due to the inherent problems.  These problem areas were:&lt;br /&gt;
*Assigning surveys in an assignment.&lt;br /&gt;
*Dates in assignments do not show up when the assignment is edited.   &lt;br /&gt;
*Unable to assign random reviewers. &lt;br /&gt;
*Unable to edit advice for questions in questionnaire. &lt;br /&gt;
*Unable to remove participants from a course.&lt;br /&gt;
*Unable to inherit team from a course&lt;br /&gt;
&lt;br /&gt;
=== Future Recommendations ===&lt;br /&gt;
*Add integration tests. &lt;br /&gt;
*Add undo functionality to other areas of Expertiza.&lt;br /&gt;
*Determine appropriate methodology for cleaning up Versions table.&lt;br /&gt;
&lt;br /&gt;
=== Template to Implement Undo Functionality ===&lt;br /&gt;
* Install paper_trail gem. Please follow the steps listed on its [https://github.com/airblade/paper_trail official webpage ]. &lt;br /&gt;
* Add ''has_paper_trail'' to the model you want to have undo functionality&lt;br /&gt;
 class Foo &amp;lt; ActiveRecord::Base&lt;br /&gt;
     has_paper_trail&lt;br /&gt;
     ...&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
* Call ''undo_link'' method in the corresponding controller. The argument is a string, which you want to show along with the undo link in flash[:note]. The following is code snippet shows how the undo functionality is implemented for the delete method of FoosController&lt;br /&gt;
 class FoosController &amp;lt; ApplicationController&lt;br /&gt;
     def delete&lt;br /&gt;
         @foo = Foo.find(params[:id])&lt;br /&gt;
         @foo.destroy&lt;br /&gt;
         undo_link(&amp;quot;Foo \&amp;quot;#{@foo.name}\&amp;quot; has been deleted successfully. &amp;quot;)&lt;br /&gt;
         redirect_to :back&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75127</id>
		<title>CSC/ECE 517 Spring 2013/FINAL PROJECT E736 UNDO DELIVERABLE</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO_DELIVERABLE&amp;diff=75127"/>
		<updated>2013-04-23T00:14:58Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Overview of Undo Functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= E736. Undo Functionality for Expertiza =&lt;br /&gt;
*Contacts: Ed Gehringer (efg@ncsu.edu) and Andrew Kofink (ajkofink@ncsu.edu)&lt;br /&gt;
*[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO Design Document]&lt;br /&gt;
*[https://docs.google.com/a/ncsu.edu/document/d/11YTjxFXFR13vJ769yFBbqn9qOueK2Ktz0Pd-gyS2W5U/ Project Description Doc]&lt;br /&gt;
== Team Members ==&lt;br /&gt;
*Chun Sing Tsui (ctsui@ncsu.edu)&lt;br /&gt;
*Kenny Yarboro (kbyarbor@ncsu.edu)&lt;br /&gt;
*Meng Cao (mcao2@ncsu.edu)&lt;br /&gt;
*Travis Folsom (twfolsom@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Project Deliverables ==&lt;br /&gt;
&lt;br /&gt;
=== Screencast Video Overview ===&lt;br /&gt;
A video overview of the project was created via [http://www.screencast-o-matic.com/ Screencast-O-Matic] and can be found [http://www.youtube.com/watch?v=1DYS5InjBOk here].  &lt;br /&gt;
&lt;br /&gt;
=== Overview of Undo Functionality ===&lt;br /&gt;
*Undo allows the user to undo their most recent actions for any items that offer the undo functionality.  &lt;br /&gt;
*The undo of file submissions was not required&lt;br /&gt;
*If an undo is attempted on an item already modified by another user, a message is displayed stating why undo cannot be performed.  Otherwise, the user is able to undo any changes to an item with the undo functionality.  &lt;br /&gt;
*When multiple actions are performed in one step, the undo functionality groups all of the changes together for the purposes of restoring all items affected by the action previously performed.&lt;br /&gt;
&lt;br /&gt;
=== List of Items Now Supported by Undo Functionality === &lt;br /&gt;
*Add Signup Sheet&lt;br /&gt;
**Delete Topic&lt;br /&gt;
**Edit Topic&lt;br /&gt;
**New Topic&lt;br /&gt;
*Assignments&lt;br /&gt;
**Add/Remove Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Courses&lt;br /&gt;
**Add Participants&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
**Toggle Private/Public&lt;br /&gt;
*Import&lt;br /&gt;
**Import Participants&lt;br /&gt;
**Import Teams&lt;br /&gt;
**Import Users&lt;br /&gt;
*Student Actions&lt;br /&gt;
**Create Team&lt;br /&gt;
**Edit Team Name&lt;br /&gt;
**Leave Team&lt;br /&gt;
**Submit Hyperlink&lt;br /&gt;
*Questions&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Questionnaires&lt;br /&gt;
**Copy&lt;br /&gt;
**Create&lt;br /&gt;
**Delete&lt;br /&gt;
**Edit&lt;br /&gt;
*Teams&lt;br /&gt;
**Add&lt;br /&gt;
**Create (Manual)&lt;br /&gt;
**Create (Random)&lt;br /&gt;
**Delete&lt;br /&gt;
**Delete All Teams&lt;br /&gt;
**Edit&lt;br /&gt;
&lt;br /&gt;
=== Redo Functionality ===&lt;br /&gt;
In addition to the Undo functionality being added, the ability to Redo an undone action is also implemented.  Whenever an Undo is performed, the user is given an option to Redo the action that was undone.  Whenever a Redo is performed, the user is given an option to Undo the action again.  &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns and Designs ===&lt;br /&gt;
*DRY&lt;br /&gt;
**&amp;quot;Don't Repeat Yourself&amp;quot; practice was followed. &lt;br /&gt;
**The app/controllers/application_controller.rb file contains all of the Undo functionality code for Expertiza.  All other controllers are able to call the necessary undo-related methods to enable the Undo functionality.&lt;br /&gt;
&lt;br /&gt;
=== Framework Leveraged &amp;amp; Enhanced ===&lt;br /&gt;
*Paper Trail(https://github.com/airblade/paper_trail)&lt;br /&gt;
**Paper Trail allows for tracking changes to model data. &lt;br /&gt;
***Good for auditing or versioning. &lt;br /&gt;
**Offers many functionalities including:&lt;br /&gt;
****Viewing a model at any stage in its lifecycle. &lt;br /&gt;
****Reverting a model to any version.&lt;br /&gt;
****Undeleting items after they have been destroyed.&lt;br /&gt;
**Compatible with Rails-2.3.15, which is the version Expertiza uses. &lt;br /&gt;
**There is a [http://railscasts.com/episodes/255-undo-with-paper-trail Railscast] showing how to implement the undo feature with Paper Trail. &lt;br /&gt;
**Ranked as the most popular framework for Active Record versioning feature in [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here]&lt;br /&gt;
*Enhancement&lt;br /&gt;
**Paper Trail only supported undo of the most recent action and did not restore associations.   &lt;br /&gt;
**Paper Trail customized to add support for restoring associations within the Expertiza system.  &lt;br /&gt;
***Database transactions paired with timestamps and user ids to group them together.&lt;br /&gt;
&lt;br /&gt;
=== Classes Modified ===&lt;br /&gt;
*apps/&lt;br /&gt;
**controllers/&lt;br /&gt;
***application_controller.rb&lt;br /&gt;
***assignment_controller.rb&lt;br /&gt;
***course_controller.rb&lt;br /&gt;
***import_file_controller.rb&lt;br /&gt;
***participants_controller.rb&lt;br /&gt;
***sign_up_sheet_controller.rb&lt;br /&gt;
***student_team_controller.rb&lt;br /&gt;
***team_controller.rb&lt;br /&gt;
***teams_users_controller.rb&lt;br /&gt;
***versions_controller.rb&lt;br /&gt;
**models/&lt;br /&gt;
***assignment_participant.rb&lt;br /&gt;
***course.rb&lt;br /&gt;
***participant.rb&lt;br /&gt;
***sign_up_topic.rb&lt;br /&gt;
***ta_mapping.rb&lt;br /&gt;
***team_node.rb&lt;br /&gt;
***teams_user.rb&lt;br /&gt;
&lt;br /&gt;
=== Unit &amp;amp; Functional Tests ===&lt;br /&gt;
The implementation of the Undo functionality did not afford any testing opportunities applicable to unit or functional tests.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes &amp;amp; Other Improvements ===&lt;br /&gt;
The following bugs were found within Expertiza and fixed:&lt;br /&gt;
*ApplicationController enhanced to rescue from ActiveRecord::RecordNotFound errors and redirect to tree display.  &lt;br /&gt;
*Copy of Assignment opened Edit page for the original Assignment and now correctly opens the Edit page for the copy of the assignment.  &lt;br /&gt;
&lt;br /&gt;
The following general improvements were made:&lt;br /&gt;
*Explicitly declared the has_one association between each object and its tree node to eliminate the manual deletion of a related tree node with the object.   &lt;br /&gt;
*Edited the Copy of Course flash message to be more clear that the copy had already been created and to resolve a misspelling.&lt;br /&gt;
&lt;br /&gt;
=== Problem Areas with Expertiza ===&lt;br /&gt;
There were some areas of functionality within Expertiza that did not work.  There were some cases in which the undo functionality could not be added due to the inherent problems.  These problem areas were:&lt;br /&gt;
*Assigning surveys in an assignment.&lt;br /&gt;
*Dates in assignments do not show up when the assignment is edited.   &lt;br /&gt;
*Unable to assign random reviewers. &lt;br /&gt;
*Unable to edit advice for questions in questionnaire. &lt;br /&gt;
*Unable to remove participants from a course.&lt;br /&gt;
*Unable to inherit team from a course&lt;br /&gt;
&lt;br /&gt;
=== Future Recommendations ===&lt;br /&gt;
*Add integration tests. &lt;br /&gt;
*Add undo functionality to other areas of Expertiza.&lt;br /&gt;
*Determine appropriate methodology for cleaning up Versions table.&lt;br /&gt;
&lt;br /&gt;
=== Template to Implement Undo Functionality ===&lt;br /&gt;
* Install paper_trail gem. Please follow the steps listed on its [https://github.com/airblade/paper_trail official webpage ]. &lt;br /&gt;
* Add ''has_paper_trail'' to the model you want to have undo functionality&lt;br /&gt;
 class Foo &amp;lt; ActiveRecord::Base&lt;br /&gt;
     has_paper_trail&lt;br /&gt;
     ...&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
* Call ''undo_link'' method in the corresponding controller. The argument is a string, which you want to show along with the undo link in flash[:note]. The following is code snippet shows how the undo functionality is implemented for the delete method of FoosController&lt;br /&gt;
 class FoosController &amp;lt; ApplicationController&lt;br /&gt;
     def delete&lt;br /&gt;
         @foo = Foo.find(params[:id])&lt;br /&gt;
         @foo.destroy&lt;br /&gt;
         undo_link(&amp;quot;Foo \&amp;quot;#{@foo.name}\&amp;quot; has been deleted successfully. &amp;quot;)&lt;br /&gt;
         redirect_to :back&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO&amp;diff=74512</id>
		<title>CSC/ECE 517 Spring 2013/FINAL PROJECT E736 UNDO</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/FINAL_PROJECT_E736_UNDO&amp;diff=74512"/>
		<updated>2013-04-02T00:57:16Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* E736. Undo Functionality for Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= E736. Undo Functionality for Expertiza =&lt;br /&gt;
*Contacts: Ed Gehringer (efg@ncsu.edu) and Andrew Kofink (ajkofink@ncsu.edu)&lt;br /&gt;
*Begin implementing SQL transactions (ActiveRecord:Transactions).  This should let the user &amp;quot;roll back&amp;quot; any creation or update of a SQL table (assignments, rubrics, etc.)  Several issues arise, that you should discuss with me. &lt;br /&gt;
**Should students be able to roll back, e.g., submissions or reviews?&lt;br /&gt;
**Suppose an instructor is trying to roll back and a TA is editing the same assignment?  How can conflicts be presented?&lt;br /&gt;
**Do rollbacks affect only what's in the db, or do they also affect submitted files?&lt;br /&gt;
*[https://docs.google.com/a/ncsu.edu/document/d/11YTjxFXFR13vJ769yFBbqn9qOueK2Ktz0Pd-gyS2W5U/ Project Description Doc]&lt;br /&gt;
== Team Members ==&lt;br /&gt;
*Chun Sing Tsui (ctsui@ncsu.edu)&lt;br /&gt;
*Kenny Yarboro (kbyarbor@ncsu.edu)&lt;br /&gt;
*Meng Cao (mcao2@ncsu.edu)&lt;br /&gt;
*Travis Folsom (twfolsom@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Design Document ==&lt;br /&gt;
&lt;br /&gt;
=== Overview of Undo Functionality ===&lt;br /&gt;
*Undo should cover any edit functionalities and any submissions of links.  File submissions do not need to be included for the scope of this project. &lt;br /&gt;
*User should be able to undo any changes to an item (such as course or assignment) as long as no other user has edited that same item within the user's current session.  &lt;br /&gt;
*If undo is attempted on an item already modified by another user, display a message stating why undo cannot be done.  &lt;br /&gt;
&lt;br /&gt;
=== List of Items to be Supported by Undo Functionality ===&lt;br /&gt;
*Assignments&lt;br /&gt;
*Courses&lt;br /&gt;
*More items may be covered if time allows.&lt;br /&gt;
&lt;br /&gt;
=== Design Patterns and Designs ===&lt;br /&gt;
*DRY&lt;br /&gt;
**&amp;quot;Don't Repeat Yourself&amp;quot; practice will be followed. &lt;br /&gt;
*Memento&lt;br /&gt;
**The Memento pattern will be followed through open-source Ruby gems leveraged by the project.&lt;br /&gt;
&lt;br /&gt;
=== Frameworks to Leverage ===&lt;br /&gt;
*Paper Trail(https://github.com/airblade/paper_trail)&lt;br /&gt;
**PaperTrail allows for tracking changes to model data. &lt;br /&gt;
***Good for auditing or versioning. &lt;br /&gt;
**Offers many functionalities including:&lt;br /&gt;
****Viewing a model at any stage in its lifecycle. &lt;br /&gt;
****Reverting a model to any version.&lt;br /&gt;
****Undeleting items after they have been destroyed.&lt;br /&gt;
**Compatible with Rails-2.3.15, which is the version Expertiza uses. &lt;br /&gt;
**There is a [http://railscasts.com/episodes/255-undo-with-paper-trail Railscast] showing how to implement the undo feature with Paper Trail. &lt;br /&gt;
**Ranked as the most popular framework for Active Record versioning feature in [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here]&lt;br /&gt;
**Alternative Frameworks are listed [https://www.ruby-toolbox.com/categories/Active_Record_Versioning here].&lt;br /&gt;
&lt;br /&gt;
=== Expected Classes to be Modified ===&lt;br /&gt;
*Assignment-related Classes&lt;br /&gt;
*Course-related Classes&lt;br /&gt;
*More classes may be covered as time allows.&lt;br /&gt;
&lt;br /&gt;
=== Unit Testing Plans ===&lt;br /&gt;
*Every class method modified will be tested via unit test. &lt;br /&gt;
*Every new method added will be tested via at least one unit test. &lt;br /&gt;
*All test methods shall be named with an appropriately descriptive name that is not too long.&lt;br /&gt;
&lt;br /&gt;
=== Functional Testing Plans ===&lt;br /&gt;
*The following functional test plans will be followed for all items enhanced with the Undo functionality:&lt;br /&gt;
**Test that an item may be changed, then undo performed successfully.  &lt;br /&gt;
**Test that a sequence of changes may be performed by one user, then undo performed successfully for each action from the sequence. &lt;br /&gt;
**Test that an item may be changed by one user, changed again by another user, then undo performed by the original user will display a failure message with description.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74199</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74199"/>
		<updated>2013-03-21T02:00:18Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Highlights of Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/functional/questionnaire_controller_test.rb&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file. Same as directions for the functional test, this can be run in either Rubymine or the command line. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/unit/questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class (refer to ''Potential Bug'' section)&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= Potential Bug =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. Because of this, our &amp;quot;delete&amp;quot; action test fails since it doesn't match the convention. If it is indeed incorrect, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74197</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74197"/>
		<updated>2013-03-21T01:59:48Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Potential Bug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/functional/questionnaire_controller_test.rb&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file. Same as directions for the functional test, this can be run in either Rubymine or the command line. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/unit/questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= Potential Bug =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. Because of this, our &amp;quot;delete&amp;quot; action test fails since it doesn't match the convention. If it is indeed incorrect, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74191</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74191"/>
		<updated>2013-03-21T01:50:56Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* NOTE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/functional/questionnaire_controller_test.rb&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file. Same as directions for the functional test, this can be run in either Rubymine or the command line. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/unit/questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= Potential Bug =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74189</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74189"/>
		<updated>2013-03-21T01:50:12Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* How to Run Unit Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/functional/questionnaire_controller_test.rb&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file. Same as directions for the functional test, this can be run in either Rubymine or the command line. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/unit/questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74185</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74185"/>
		<updated>2013-03-21T01:48:31Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* How to Run Controller Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test. In Rubymine, this can be done by right clicking the test file and selecting &amp;quot;Run &amp;lt;filename&amp;gt;&amp;quot;. Individual tests inside each test file can also be run by right clicking on the test method name and selecting &amp;quot;Run &amp;lt;method_name&amp;gt;&amp;quot;. If the command line is preferred, the following command can be used:&lt;br /&gt;
&lt;br /&gt;
 ruby -Itest test/functional/questionnaire_controller_test.rb&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74181</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74181"/>
		<updated>2013-03-21T01:41:14Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Test Coverage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
We tried to cover as many types of useful cases as possible according to the project requirements. We used assertions that checked counts after create and delete, as well as asserted redirects. We also tested against invalid inputs that could cause errors. All of the tests are self-explanatory based on their method names, and there really is no need to further provide explanations here.&lt;br /&gt;
&lt;br /&gt;
We also attempted to test the private methods of the controller as well at the beginning of the project. However, we couldn't find a way to test many of them due to the fact that they reference the params[] hash in the methods, and we can't isolate the testing of those methods without calling some controller action. Since these private methods are only used by the public controller action methods, we did the next best thing by creating tests for the action methods that would use these private methods to test them indirectly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74167</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74167"/>
		<updated>2013-03-21T01:32:29Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Modifications to Existing QuestionnaireController Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added new fixtures to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in our new fixures.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74165</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74165"/>
		<updated>2013-03-21T01:31:14Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Testing - questionnaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1SVNx7Eh6dUdrz2a9rGSgBxLkxAmuBUm8eu08nHEdjIg/edit# Project Description]&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74159</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74159"/>
		<updated>2013-03-21T01:25:52Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Highlights of Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* The test that uses the &amp;quot;delete&amp;quot; action in the controller was failing due to a potential bug in the questionnaire.rb model class&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74158</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74158"/>
		<updated>2013-03-21T01:24:17Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Questionnaire Subclass Unit Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (questionnaire.rb) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74152</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74152"/>
		<updated>2013-03-21T01:22:38Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Test Coverage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;compute_weighted_score&amp;quot; from the the base class was the only thing that needed to be tested (due to the above reason). Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74147</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74147"/>
		<updated>2013-03-21T01:19:54Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* NOTE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system thoroughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74145</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74145"/>
		<updated>2013-03-21T01:19:35Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* NOTE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
The Questionnaire model class contains a ''has_many :assignment_questionnaire'' that should be ''has_many :assignment_questionnaire'''s''' '' according to convention. If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, the ''self.assignemnt_questionnaire...'' call also needs to be changed to ''self.assignment_questionnaires...''.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system throughly.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74141</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74141"/>
		<updated>2013-03-21T01:14:18Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* List of files changed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/assignment_questionnaires.yml&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/questionnaire_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
Questionnaire class, has_many :assignment_questionnaire needs to be :assignment_questionnaires.  Also needs to be changed on the next line: through: =&amp;gt; &amp;quot;assignment_questionnaires&amp;quot; (we were told that this was convention to be plural).  If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, assignemnt_questionnaire also needs to be changed to assignment_questionnaires.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74136</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74136"/>
		<updated>2013-03-21T01:10:44Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Highlights of Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test in functional testing was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
Questionnaire class, has_many :assignment_questionnaire needs to be :assignment_questionnaires.  Also needs to be changed on the next line: through: =&amp;gt; &amp;quot;assignment_questionnaires&amp;quot; (we were told that this was convention to be plural).  If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, assignemnt_questionnaire also needs to be changed to assignment_questionnaires.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74134</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74134"/>
		<updated>2013-03-21T01:10:07Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Questionnaire Subclass Unit Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire subclasses:&lt;br /&gt;
* author_feedback_questionnaire.rb&lt;br /&gt;
* metareview_questionnaire.rb&lt;br /&gt;
* review_questionnaire.rb&lt;br /&gt;
* teammate_review_questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
Questionnaire class, has_many :assignment_questionnaire needs to be :assignment_questionnaires.  Also needs to be changed on the next line: through: =&amp;gt; &amp;quot;assignment_questionnaires&amp;quot; (we were told that this was convention to be plural).  If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, assignemnt_questionnaire also needs to be changed to assignment_questionnaires.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74133</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74133"/>
		<updated>2013-03-21T01:08:36Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Questionnaire Subclass Unit Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
The original assignment was to write unit tests for the Questionnaire Subclasses. As we reviewed the tests, it was found that most of the methods were trivial (ex: the method &amp;quot;symbol&amp;quot; only only returns a hardcoded symbol).  The only method that was found to be worth testing was the get_weighted_score method.  Upon further review, however, we found that testing this method in each of the four subclasses violated the DRY principle.  Therefore, we moved the test to the superclass (Questionnaire) to test the &amp;quot;get_weighted_score&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the existing unit test for AuthorFeedbackQuestionnaire for testing the &amp;quot;get_weighted_score&amp;quot; method. Even though the test could be run, we found that it was not making assertions as it should. The files for the other 3 questionnaire subclasses were created to complete the testing on them.  As stated earlier, we then found that testing the &amp;quot;get_weighted_score&amp;quot; method was redundant, violating the DRY principle, so it was moved to the superclass (Questionnaire).  The tests in the subclasses were deleted (since they were redundant) but the test files were kept for future testing of the subclass if/when needed.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
Tested the one method &amp;quot;compute_weighted_score&amp;quot; from the subclasses that was not trivial. Based on an average, it was asserted that the value was not nil and that the value was computed correctly.&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;compute_weighted_score&amp;quot; test can be found in the Questionnaire Unit Test file.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit test for questionnaire class&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= NOTE =&lt;br /&gt;
Questionnaire class, has_many :assignment_questionnaire needs to be :assignment_questionnaires.  Also needs to be changed on the next line: through: =&amp;gt; &amp;quot;assignment_questionnaires&amp;quot; (we were told that this was convention to be plural).  If this is the case, then in the &amp;quot;compute_weighted_score&amp;quot; method, assignemnt_questionnaire also needs to be changed to assignment_questionnaires.  This most likely needs to be refactored, but we did not want to do a refactor without testing its effects on the system.&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74024</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74024"/>
		<updated>2013-03-20T17:13:41Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
In addition, we added a new questionnaire fixture (:questionnaire5) to help with our testing. Through debugging the test error messages, we saw that an additional required column called &amp;quot;section&amp;quot; has been added to the &amp;quot;Questionnaire&amp;quot; model, which was contributing to the failures. We added the additional column accordingly in :questionnaire5.&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
There was only one test in the exiting unit test for AuthorFeedbackQuestionnaire for testing the get_weighted_score method. Even though the test can be run, we found that it was not making assertions as it should, and therefore chose to rewrote test instead. &lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74023</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74023"/>
		<updated>2013-03-20T16:49:51Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing QuestionnaireController Test ===&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Questionnaire Subclass Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74022</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74022"/>
		<updated>2013-03-20T16:48:52Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* QuestionnaireController Functional Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests ==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Modifications to Existing Tests ===&lt;br /&gt;
&lt;br /&gt;
==== Modifications to QuestionnaireController Test ====&lt;br /&gt;
&lt;br /&gt;
There were a few tests already written for the Questionnaire controller, but they were not passing initially. We had to modify several things in the test and questionnaire fixture in order to get things up and running. The setup method contained login code that was outdated, and thus each test would result in a redirect due to the invalid login credential. So we looked through other more up to date functional test files and found the correct way to login as a particular user. We also put this code in a helper method so we can call it more easily in different tests if we so choose (more on this in the &amp;quot;Helper Methods&amp;quot; section).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modifications to Questionnaire Subclass Tests ====&lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74021</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74021"/>
		<updated>2013-03-20T15:00:43Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
=== How to Run Unit Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74020</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74020"/>
		<updated>2013-03-20T14:59:53Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Questionnaire Subclass Unit Tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74019</id>
		<title>CSC/ECE 517 Spring 2013/OSS E605B</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/OSS_E605B&amp;diff=74019"/>
		<updated>2013-03-20T14:59:04Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing - questionnaire=&lt;br /&gt;
&lt;br /&gt;
== QuestionnaireController Functional Tests==&lt;br /&gt;
&lt;br /&gt;
The majority of the tests implemented in this project are functional tests of the questionnaire controller. The test cases were written using the [http://api.rubyonrails.org/classes/ActionController/TestCase.html ActionController::TestCase] framework provided by Rails. &lt;br /&gt;
&lt;br /&gt;
=== Helper Methods ===&lt;br /&gt;
&lt;br /&gt;
There are two methods that assist in setting up and running the tests:&lt;br /&gt;
&lt;br /&gt;
*The setup method&lt;br /&gt;
*The login_user method&lt;br /&gt;
&lt;br /&gt;
The setup method assigns three special instance variables that are associated with the ActionController::TestCase (@controller, @request, and @response). In addition to setting these, the @Questionnaire variable is assigned to id of the :questionnaire5 fixture. This is the default questionnaire fixture that is used in a lot of the test cases. You will also notice that the fixture :admin is being logged in as the default user. This is done so that you don't have explicitly log into a user account for each test case. The only time you would need to call the method to log in for a particular test case is if you needed to test something specifically in another user type's account (for example a student account as is done in test_create_questionnaire_with_student.&lt;br /&gt;
&lt;br /&gt;
  def setup&lt;br /&gt;
    @controller = QuestionnaireController.new&lt;br /&gt;
    @request = ActionController::TestRequest.new&lt;br /&gt;
    @response = ActionController::TestResponse.new&lt;br /&gt;
    @Questionnaire = questionnaires(:questionnaire5).id&lt;br /&gt;
    login_user(:admin)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The login_user method was created to &amp;quot;DRY out&amp;quot; the code associated with logging a user in. The method signature is:&lt;br /&gt;
&lt;br /&gt;
   def login_user(userType)&lt;br /&gt;
&lt;br /&gt;
If you pass a symbol of the user type you would like to use for a test, it will log in as that user type for the particular test. The parameter name is userType and assumes that there is a fixture with the name of the user type. There seem to be sufficient fixtures for all of the different user types currently, but additional fixtures may need to be created in the future if new user types are added to the system.&lt;br /&gt;
&lt;br /&gt;
=== Test Coverage ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of tests that we created. &lt;br /&gt;
&lt;br /&gt;
* Happy path tests of the controller's public methods. There is a test for every method. (ex: test_new)&lt;br /&gt;
* Sad path tests that passed invalid parameters. (ex: test_edit_questionnaire_with_lower_max_score_than_min)&lt;br /&gt;
* Sad path tests that tried to do things with insufficient access level. (ex: test_create_questionnaire_with_student)&lt;br /&gt;
&lt;br /&gt;
=== How to Run Controller Test ===&lt;br /&gt;
&lt;br /&gt;
All of the QuestionnaireController tests are in the questionnaire_controller_test.rb file and can be run as a standard functional test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Members ===&lt;br /&gt;
*Jonathan Wills - jrwills2&lt;br /&gt;
*Chun Sing Tsui - ctsui&lt;br /&gt;
*Travis Folsom - twfolsom&lt;br /&gt;
&lt;br /&gt;
=== Highlights of Project ===&lt;br /&gt;
* Added unit tests for questionnaire subclasses&lt;br /&gt;
* Added functional tests for questionnaire controller&lt;br /&gt;
* 24 total tests&lt;br /&gt;
* Delete test was failing due to a potential bug in the questionnaire controller&lt;br /&gt;
&lt;br /&gt;
=== List of files changed ===&lt;br /&gt;
*test/fixtures/question_types.yml&lt;br /&gt;
*test/fixtures/questionnaires.yml&lt;br /&gt;
*test/fixtures/questions.yml&lt;br /&gt;
*test/functional/questionnaire_controller_test.rb&lt;br /&gt;
*test/unit/author_feedback_questionnaire_test.rb&lt;br /&gt;
*test/unit/metareview_questionnaire_test.rb&lt;br /&gt;
*test/unit/review_questionnaire_test.rb&lt;br /&gt;
*test/unit/teammate_review_questionnaire_test.rb&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73039</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73039"/>
		<updated>2013-02-15T18:00:58Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
= Current State of GUI Toolkits for Ruby =&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
= Overview of other GUI toolkits =&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
== Visual Ruby ==&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
== Monkeybars ==&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
== FFI-Tk ==&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit. Since it uses [https://github.com/ffi/ffi/wiki/Why-use-FFI FFI], it is meant to be provided as an extension that doesn't need compilation and is multi-platformed.[https://github.com/ffi/ffi/wiki/Why-use-FFI]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to use for simple applications&lt;br /&gt;
**Eliminates different ways of coding to achieve the same result&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Still uses the TK GUI styling, which is the main complain about TK anyways&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to its Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies, the heavier the toolkit feels. FFI::TK, on the other hand, does not offer any more features than others to warrant popular use. It does seem, however, several of the most popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [https://github.com/ffi/ffi/wiki/Why-use-FFI Why use FFI] &amp;lt;br /&amp;gt;&lt;br /&gt;
[6] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73038</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73038"/>
		<updated>2013-02-15T17:59:43Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
= Current State of GUI Toolkits for Ruby =&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
= Overview of other GUI toolkits =&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
== Visual Ruby ==&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
== Monkeybars ==&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
== FFI-Tk ==&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit. Since it uses [https://github.com/ffi/ffi/wiki/Why-use-FFI FFI], it is meant to be provided as an extension that doesn't need compilation and is multi-platformed.[https://github.com/ffi/ffi/wiki/Why-use-FFI]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to use for simple applications&lt;br /&gt;
**Eliminates different ways of coding to achieve the same result&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Still uses the TK GUI styling, which is the main complain about TK anyways&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to its Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies, the heavier the toolkit feels. FFI::TK, on the other hand, does not offer any more features than others to warrant popular use. It does seem, however, several of the most popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73037</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73037"/>
		<updated>2013-02-15T17:54:49Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
= Overview of other GUI toolkits =&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
== Visual Ruby ==&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
== Monkeybars ==&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
== FFI-Tk ==&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit. Since it uses [https://github.com/ffi/ffi/wiki/Why-use-FFI FFI], it is meant to be provided as an extension that doesn't need compilation and is multi-platformed.[https://github.com/ffi/ffi/wiki/Why-use-FFI]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to use for simple applications&lt;br /&gt;
**Eliminates different ways of coding to achieve the same result&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Still uses the TK GUI styling, which is the main complain about TK anyways&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to its Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies, the heavier the toolkit feels. FFI::TK, on the other hand, does not offer any more features than others to warrant popular use. It does seem, however, several of the most popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73036</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73036"/>
		<updated>2013-02-15T17:42:00Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Overview of other GUI toolkits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
= Overview of other GUI toolkits =&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
== Visual Ruby ==&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
== Monkeybars ==&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
== FFI-Tk ==&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit. Since it uses [https://github.com/ffi/ffi/wiki/Why-use-FFI FFI], it is meant to be provided as an extension that doesn't need compilation and is multi-platformed.[https://github.com/ffi/ffi/wiki/Why-use-FFI]&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
=== Up and Running ===&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons ===&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to use for simple applications&lt;br /&gt;
**Eliminates different ways of coding to achieve the same result&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Still uses the TK GUI styling, which is the main complain about TK anyways&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73035</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73035"/>
		<updated>2013-02-15T17:28:25Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* FFI-Tk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to use for simple applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Has no real advantage over default TK toolkit&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73034</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73034"/>
		<updated>2013-02-15T17:17:33Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Up and Running */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 # Sample code taken from https://github.com/manveru/ffi-tk&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73033</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73033"/>
		<updated>2013-02-15T17:16:59Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Monkeybars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/] It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Easy to install&lt;br /&gt;
**Project structure is better suited for large and complex applications&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Creating a new project has high overhead&lt;br /&gt;
**Requires too much effort for simple GUI applications&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73032</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73032"/>
		<updated>2013-02-15T17:12:47Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Visual Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
==== Pros and Cons ====&lt;br /&gt;
*Pros&lt;br /&gt;
**Very easy to set up. &lt;br /&gt;
**Available on all three major platforms (Windows, Linux, Mac)&lt;br /&gt;
**Integration with Glade visual designer provides another easy option to create layouts&lt;br /&gt;
&lt;br /&gt;
*Cons&lt;br /&gt;
**Although it is available on all three platforms, it is obvious that it was made with Linux in mind. Launching anything from VR is essentially running a command, and those commands may not be available on Windows (e.g. selecting a Glade file and launching Glade did not work from within VR. Glade had to run manually).&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73031</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73031"/>
		<updated>2013-02-15T17:04:34Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Up and Running */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To create a brand new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73030</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=73030"/>
		<updated>2013-02-15T17:02:16Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Up and Running */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
To create a new project, simply follow the instructions below:&lt;br /&gt;
&lt;br /&gt;
#Runs Visual Ruby if not already running&lt;br /&gt;
#Press &amp;quot;Select Folder&amp;quot; button at the bottom of the project selector (&amp;quot;Open project&amp;quot; if VR is already running to get to the project selector)&lt;br /&gt;
#Navigate to the directory to your choice, and press &amp;quot;Create Folder&amp;quot; on the top right with the project name of your choice&lt;br /&gt;
#Press &amp;quot;Open&amp;quot;, and an new default &amp;quot;Hello World&amp;quot; application will appear&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72898</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72898"/>
		<updated>2013-02-14T23:17:25Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Overview of other GUI toolkits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This section will not attempt to cover the same toolkits that were discussed in the previous articles, as there are simply not enough advancements to them to warrant further discussions. The following toolkits are not the most popular choices for Ruby GUI development, according to [https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox]. However, by reviewing what theses toolkits have to offer, comparisons can then be made with more popular options by examining their advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72896</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72896"/>
		<updated>2013-02-14T23:10:55Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Monkeybars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools (e.g. Netbeans) you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.[http://monkeybars.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. This will be a big advantage if creating non-trivial Swing applications with the logic written in Ruby is what you're looking for.[http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72892</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72892"/>
		<updated>2013-02-14T23:08:17Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. It also allows the use of visual designers(e.g. Netbeans) available to create Swing layouts. This will be a big advantage if creating Swing applications with the logic written in Ruby is what you're looking for.[http://monkeybars.rubyforge.org/][http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[5] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72891</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72891"/>
		<updated>2013-02-14T23:08:03Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. It also allows the use of visual designers(e.g. Netbeans) available to create Swing layouts. This will be a big advantage if creating Swing applications with the logic written in Ruby is what you're looking for.[http://monkeybars.rubyforge.org/][http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1] &amp;lt;br /&amp;gt; &lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://monkeybars.rubyforge.org/ Monkeybars Homepage] &amp;lt;br /&amp;gt; &lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library] &amp;lt;br /&amp;gt; &lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72889</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72889"/>
		<updated>2013-02-14T23:06:39Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Monkeybars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that Monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than most of the other libraries. &lt;br /&gt;
&lt;br /&gt;
Monkeybars excels at building large and complex GUI applications since it is based on the mature Java language and Swing libraries. It also allows the use of visual designers(e.g. Netbeans) available to create Swing layouts. This will be a big advantage if creating Swing applications with the logic written in Ruby is what you're looking for.[http://monkeybars.rubyforge.org/][http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72881</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72881"/>
		<updated>2013-02-14T22:58:55Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Monkeybars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] from [http://en.wikipedia.org/wiki/JRuby JRuby]. JRuby is the Java implementation of the Ruby interpreter. This means Ruby code is executed in the JVM. As you'd expect, JRuby is tightly integrated with Java, and it has the ability to invoke classes of the Java platform. As a result, Swing, the Java GUI toolkit, can be used with JRuby.&lt;br /&gt;
&lt;br /&gt;
Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72875</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72875"/>
		<updated>2013-02-14T22:42:01Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox GUI Frameworks]&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72874</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72874"/>
		<updated>2013-02-14T22:40:54Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
*[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
*[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72873</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72873"/>
		<updated>2013-02-14T22:40:26Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://visualruby.net/ Visual Ruby Homepage]&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars GitHub Page]&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72872</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72872"/>
		<updated>2013-02-14T22:36:16Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: /* Overview of other GUI toolkits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/manveru/ffi-tk FFI-Tk] is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72478</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72478"/>
		<updated>2013-02-11T04:03:51Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
FFI-Tk is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72259</id>
		<title>CSC/ECE 517 Spring 2013/ch1a c ct</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2013/ch1a_c_ct&amp;diff=72259"/>
		<updated>2013-02-09T03:11:31Z</updated>

		<summary type="html">&lt;p&gt;Ctsui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1czn14Zpte-kVHdcb5BUIkpI6wRcABH246jGCg9vncQA/edit#heading=h.8hxo5kudhpn2 Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
Ruby as a programming language has gained popularity in recent years (mainly due to the Rails web framework). There exists quite a few graphical user interface toolkits/frameworks for Ruby so that desktop GUI applications can be created. Most are simply bindings to existing GUI framework API's like Qt and GTK+, so they may seem awkward and unfitting to the Ruby language's style. Shoes, on the other hand, is written for Ruby specifically. Two previous articles have made detailed comparisons between different toolkits by looking at various factors such as ease of installation, documentation, look and feel, and difficulty of usage.[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH][http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM] This article will give updates on GUI toolkits that has developed since the previous articles were written, as well as discuss other toolkits that were not present in the previous articles.&lt;br /&gt;
&lt;br /&gt;
== Current State of GUI Toolkits for Ruby ==&lt;br /&gt;
&lt;br /&gt;
There is a number of Ruby GUI toolkits to choose from to create a desktop application. In one of the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH#Projects_developed_in_wxRuby previous] articles, an official 2008 Ruby GUI Survey was referenced to discuss the popularity of available GUI toolkits. For a quick recap, here is the result for the question &amp;quot;''Which of the GUI toolkits do you currently use, and which do you think it's likely you'll use in the future?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Survey_results1.jpg|thumb|Survey Results]]&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#Ruby-GNOME2/GTK&lt;br /&gt;
#wxRuby&lt;br /&gt;
#Ruby-Tk&lt;br /&gt;
#Ruby Cocoa/MacRuby&lt;br /&gt;
#QtRuby&lt;br /&gt;
#JRuby + Swing&lt;br /&gt;
#FxRuby&lt;br /&gt;
#JRuby + SWT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.ruby-toolbox.com/categories/GUI_Frameworks The Ruby Toolbox], a website that tracks the popularity of Ruby related tools by usage in open source projects, has a list of several toolkits under its &amp;quot;GUI Frameworks&amp;quot; category. The ranking in current popularity (Feb 2013) of GUI toolkits is as follows:&lt;br /&gt;
&lt;br /&gt;
#Shoes&lt;br /&gt;
#FxRuby&lt;br /&gt;
#wxRuby&lt;br /&gt;
#QtBindings&lt;br /&gt;
#Ruby/GTK&lt;br /&gt;
#monkeybars&lt;br /&gt;
#FFI::Tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this list is not as scientific as the official survey result, it does reflect current project usage quite well, and it shows the general acceptance of a particular toolkit. We can see by comparing the two lists that the most popular toolkits (Shoes, FxRuby, wxRuby, Ruby/GTK) are still relevant today. Shoes has proven to be a popular choice since its creation in 2007. Most of the other toolkits remain stable, judging by the dates of code commits of their respective repository. One main exception is wxRuby. wxRuby has not seen a release since September of 2009 even though wxWidgets, the C++ GUI library which wxRuby is based, is still in active development. &lt;br /&gt;
&lt;br /&gt;
However, even though most of these projects are being maintained, there has not been much growth to the GUI community for Ruby. There's still a very low number of applications that are built using GUI toolkits for Ruby, and many of them are personal projects. A simply Google search for Ruby GUI toolkits will return results that mostly predates 2010.&lt;br /&gt;
&lt;br /&gt;
== Overview of other GUI toolkits ==&lt;br /&gt;
This article will not attempt to cover the same toolkits that were discussed in the previous articles. The following toolkits are not the most popular choices for Ruby GUI development. However, comparisons can then be made with more popular options by examining the necessary steps to get each one of them up and running&lt;br /&gt;
&lt;br /&gt;
=== Visual Ruby ===&lt;br /&gt;
[http://visualruby.net/ Visual Ruby] is designed to simplify the process of adding a GTK+ windows to Ruby applications. It is also designed to completely integrate with the Glade user interface designer.&lt;br /&gt;
&lt;br /&gt;
==== Installation ==== &lt;br /&gt;
# Install Ruby 1.9.3&lt;br /&gt;
# Install Glade and GTK&lt;br /&gt;
# Install&lt;br /&gt;
 &amp;gt;&amp;gt; gem install visualruby&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To run Visual Ruby, simply run the following command&lt;br /&gt;
 &amp;gt;&amp;gt; vr&lt;br /&gt;
&lt;br /&gt;
After starting up VR, you will see a list of example projects that you can open and run.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Visual_ruby_2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Monkeybars ===&lt;br /&gt;
[https://github.com/monkeybars/monkeybars-core Monkeybars] is a library that enables the use of Swing from JRuby. Monkeybars aims to allow you to continue using the GUI editing tools you are used to but makes it easy to write all your application logic in pure Ruby. It utilizes the Model, View, Controller (MVC) design pattern to separate view logic and user interface components from application logic.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that monkeybars should not be the first choice if you're looking to quickly create a GUI application from scratch. The overhead of getting one of these projects up and running will be relatively higher than some other libraries. &lt;br /&gt;
&lt;br /&gt;
What monkeybars is good for is building large and complex GUI applications since it is based on the mature Java language and Swing libraries. If creating Swing applications with Ruby is what you're looking for, this will be a reasonable choice. [http://www.ibm.com/developerworks/library/j-monkeybars/index.html]&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
# Install Java and JRuby&lt;br /&gt;
# Install Monkeybars&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; gem install rawr&lt;br /&gt;
 &amp;gt;&amp;gt; gem install monkeybars&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
To create a new project directory&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; monkeybars test_project&lt;br /&gt;
&lt;br /&gt;
After creating a new monkeybars project, follow the detailed tutorials [http://monkeybars.org/tutorials.html here] to configure your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FFI-Tk ===&lt;br /&gt;
&lt;br /&gt;
FFI-Tk is a pure Ruby FFI (foreign funciton interface) wrapper for the Tk GUI toolkit.&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
 gem install ffi-tk&lt;br /&gt;
&lt;br /&gt;
==== Up and Running ====&lt;br /&gt;
 require 'ffi-tk'&lt;br /&gt;
 Tk.init&lt;br /&gt;
 Tk::Button.new('.', text: 'Press me'){&lt;br /&gt;
   Tk.message_box(message: 'Hello, World!')&lt;br /&gt;
 }.pack&lt;br /&gt;
 Tk.mainloop&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Although there are many toolkits available for building GUI applications with Ruby, there hasn't been much growth in this area relative to 2010. One possible explanation is that the popularity of desktop application develop has yielded to web applications, which Ruby is most well known for due to it's Rails framework. By looking at the several toolkits examined above, we can also see why some of them remain to be less popular than others. Monkeybars, for example, has too much overhead just to get an application up and running. The more dependencies that are necessary, the heavier the toolkit feels. It does seem, however, that the more popular options will continue to be stable projects. One example is Shoes. Shoes is currently at version 3, and a new version is coming soon. Shoes 4 will be the next version of Shoes[https://github.com/shoes/shoes4]. Perhaps this is why the [http://shoesrb.com/downloads download] page for Shoes is currently void of any content.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_PH Previous Submission 1]&lt;br /&gt;
&lt;br /&gt;
[2] [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MM Previous Submission 2]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.ibm.com/developerworks/library/j-monkeybars/index.html The monkeybars library]&lt;br /&gt;
&lt;br /&gt;
[4] [http://shoesrb.com/downloads download Shoes 4 Github Page]&lt;/div&gt;</summary>
		<author><name>Ctsui</name></author>
	</entry>
</feed>