<?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=Nmpedema</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=Nmpedema"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Nmpedema"/>
	<updated>2026-05-19T22:09:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92272</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92272"/>
		<updated>2014-11-22T21:19:34Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Modified version of Stable Matching Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off [what does that mean?] the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids (x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system. [Describe the rationale for this.  Is p just the number of slots?]&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.  [I can guess how this might be implemented, but an example would help to clarify.  Also, I am interested in the rationale.]&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost. [It would be better to keep bids, insofar as possible.  Losing one's topic is a &amp;quot;gotcha&amp;quot; of joining a team, and I wouldn't want to see that continue under this system.]&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition (1), a topic would be assigned to the team based on the priority order of the bids that the team specified. [I don't think that this defines an algorithm.  An algorithm needs to be a set of steps in order.  This just describes the result.]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; |'''Use Case'''&lt;br /&gt;
|width=&amp;quot;700px&amp;quot; |'''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;700px&amp;quot; |'''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; | '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;100px&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Modified version of Stable Matching Algorithm&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
This flow chart illustrates the algorithm used to assign topics to teams based on the strength of the teams(bidder) and the priority in which they bid for the topic.&lt;br /&gt;
&lt;br /&gt;
[[File: Chart.png|Modified version of Stable Matching|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future scenario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Design Patterns&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The following patterns are used:&lt;br /&gt;
#&amp;lt;b&amp;gt;DRY&amp;lt;/b&amp;gt;: Separating out the redundant data from SignUpTopic&lt;br /&gt;
#&amp;lt;b&amp;gt;MVC&amp;lt;/b&amp;gt;&lt;br /&gt;
#&amp;lt;b&amp;gt;Separation of concerns&amp;lt;/b&amp;gt;: The IntelligentAssignmentTopicController is separated from AssignmentTopicController as the former's functionality is specific and hence should not be part of the general AssignmentTopic Controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Chart.png&amp;diff=92271</id>
		<title>File:Chart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Chart.png&amp;diff=92271"/>
		<updated>2014-11-22T21:19:07Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92270</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92270"/>
		<updated>2014-11-22T21:17:02Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Modified version of Stable Matching Algorithm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off [what does that mean?] the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids (x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system. [Describe the rationale for this.  Is p just the number of slots?]&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.  [I can guess how this might be implemented, but an example would help to clarify.  Also, I am interested in the rationale.]&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost. [It would be better to keep bids, insofar as possible.  Losing one's topic is a &amp;quot;gotcha&amp;quot; of joining a team, and I wouldn't want to see that continue under this system.]&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition (1), a topic would be assigned to the team based on the priority order of the bids that the team specified. [I don't think that this defines an algorithm.  An algorithm needs to be a set of steps in order.  This just describes the result.]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; |'''Use Case'''&lt;br /&gt;
|width=&amp;quot;700px&amp;quot; |'''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;700px&amp;quot; |'''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100px&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; | '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 800px; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;100px&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;700px&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Modified version of Stable Matching Algorithm&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
This flow chart illustrates the algorithm used to assign topics to teams based on the strength of the teams(bidder) and the priority in which they bid for the topic.&lt;br /&gt;
&lt;br /&gt;
[[File: Intel.png|Modified version of Stable Matching|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future scenario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Design Patterns&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The following patterns are used:&lt;br /&gt;
#&amp;lt;b&amp;gt;DRY&amp;lt;/b&amp;gt;: Separating out the redundant data from SignUpTopic&lt;br /&gt;
#&amp;lt;b&amp;gt;MVC&amp;lt;/b&amp;gt;&lt;br /&gt;
#&amp;lt;b&amp;gt;Separation of concerns&amp;lt;/b&amp;gt;: The IntelligentAssignmentTopicController is separated from AssignmentTopicController as the former's functionality is specific and hence should not be part of the general AssignmentTopic Controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Intel.png&amp;diff=92269</id>
		<title>File:Intel.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Intel.png&amp;diff=92269"/>
		<updated>2014-11-22T21:15:11Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:IA.png&amp;diff=92268</id>
		<title>File:IA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:IA.png&amp;diff=92268"/>
		<updated>2014-11-22T21:04:08Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: uploaded a new version of &amp;amp;quot;File:IA.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:IA.png&amp;diff=92267</id>
		<title>File:IA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:IA.png&amp;diff=92267"/>
		<updated>2014-11-22T21:03:44Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92012</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92012"/>
		<updated>2014-11-12T03:40:33Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Use Case'''&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92011</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92011"/>
		<updated>2014-11-12T03:39:53Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Use Case'''&lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; |'''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92010</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92010"/>
		<updated>2014-11-12T03:36:09Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; |'''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92009</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=92009"/>
		<updated>2014-11-12T03:33:40Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''E1475. Intelligent assignment of teams'''&lt;br /&gt;
&lt;br /&gt;
This page discusses the requirements and design specifications of final project E1475. Intelligent Assignment of teams. It starts out by giving an introduction and discussing previous implementations and related work. It then details out the workflow of the proposed implementation and shows the use case diagrams and sequence diagrams associated with it. Finally the page mentions discusses the class design and database design that would go with the implementation of the project.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
#The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
#The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
#The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
#The teams should be able to prioritize their bids.&lt;br /&gt;
#The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
1. The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
2. For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; | '''Use Case''' &lt;br /&gt;
| width=&amp;quot;100pt&amp;quot; |'''Enable Intelligent Assignment''' &lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor &lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50pt&amp;quot; |'''Use Case''' &lt;br /&gt;
|width=&amp;quot;100pt&amp;quot; | '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91971</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91971"/>
		<updated>2014-11-12T02:41:16Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91948</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91948"/>
		<updated>2014-11-12T02:19:58Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priority of the topic. &lt;br /&gt;
&amp;lt;br/&amp;gt;The system updates the bid for the topic with corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run intelligent assignment option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91942</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91942"/>
		<updated>2014-11-12T02:13:08Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Delete bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student clicks “Delete bid”.&amp;lt;br/&amp;gt;The system removes the bid for the topic.&amp;lt;br/&amp;gt;The system presents the updated view reflecting the changes.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Reorder Priorities'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;Student has already selected few topics for bidding.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic for which the bid existed.&amp;lt;br/&amp;gt;The student changes the priorities of the topics. &lt;br /&gt;
&amp;lt;br/&amp;gt;The system updates the bid for the topics with corresponding priorities.&amp;lt;br/&amp;gt;The system presents the updated view with reordered topics.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Run Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and enabled the intelligent assignment option.&amp;lt;br/&amp;gt;The due date for the topic selection has passed.&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || The topics are intelligently assigned to the teams&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which topic selection process has completed. &amp;lt;br/&amp;gt;The instructor selects the run lottery option.&amp;lt;br/&amp;gt;The system performs intelligent assignment of topics and allots topics to teams.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91935</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91935"/>
		<updated>2014-11-12T02:05:10Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Add bids'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Student (Team Leader)&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Student is logged into expertiza system . &amp;lt;br/&amp;gt;SignUp sheet with the list of topics is available for the assignment.&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Student selects the assignment in the topic selection phase &lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The student selects the topic of interest from the list of topics in the SignUp sheet. &amp;lt;br/&amp;gt;The student chooses the priority of the topic.&amp;lt;br/&amp;gt;The system saves the bid for the topic and the corresponding priority.&amp;lt;br/&amp;gt;The system presents the updated view with the chosen topic.&lt;br /&gt;
|-&lt;br /&gt;
| Alternate Flow || The student has already exceeded the maximum bid limit but still selects a topic.&amp;lt;br/&amp;gt;The system throws an error saying “Bid limit exceeded”&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91928</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91928"/>
		<updated>2014-11-12T02:00:24Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &amp;lt;br/&amp;gt;Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &amp;lt;br/&amp;gt;Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &amp;lt;br/&amp;gt;The instructor checks the “Enable Intelligent Assignment” option and presses Save.&amp;lt;br/&amp;gt;The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91927</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91927"/>
		<updated>2014-11-12T01:57:34Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. &lt;br /&gt;
Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment. &lt;br /&gt;
Students can place their bids for the assignment topics on commencement of the selection process&lt;br /&gt;
|-&lt;br /&gt;
| Basic Flow || The instructor selects the assignment for which the topic selection process has not yet started. &lt;br /&gt;
The instructor checks the “Enable Intelligent Assignment” option and presses Save.&lt;br /&gt;
The system saves the instructors choice for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91923</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91923"/>
		<updated>2014-11-12T01:53:23Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
{| style=&amp;quot;width: 60%; height: 200px&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Use Case''' || '''Enable Intelligent Assignment'''&lt;br /&gt;
|-&lt;br /&gt;
| Primary Actor || Instructor&lt;br /&gt;
|- &lt;br /&gt;
| Preconditions || Instructor is logged into the Expertiza system. Instructor has created an Assignment and allotted the Assignment Topics&lt;br /&gt;
|-&lt;br /&gt;
| Postconditions || Intelligent Assignment option is enabled for the assignment.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91912</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91912"/>
		<updated>2014-11-12T01:35:50Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:UseCase.png|frame|center|Fig. Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UseCase.png&amp;diff=91911</id>
		<title>File:UseCase.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UseCase.png&amp;diff=91911"/>
		<updated>2014-11-12T01:34:12Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: uploaded a new version of &amp;amp;quot;File:UseCase.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91909</id>
		<title>CSC/ECE 517 Fall 2014/final E1475 nrnn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/final_E1475_nrnn&amp;diff=91909"/>
		<updated>2014-11-12T01:31:22Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Sequence Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;b&amp;gt; E1475. Intelligent assignment of teams&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Problem Statement&amp;lt;/b&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
According to the existing code workflow, the assignment of topics to teams are based on FCFS (first come first serve) basis, where a team which first signs up for a topic gets the topic while other teams are waitlisted on the same topic. Since ‘sign up time’ is the only factor considered for topic assignment this method causes problems such as:&lt;br /&gt;
&lt;br /&gt;
#The assignment of topics are FCFS, hence not completely fair.&lt;br /&gt;
#Non-uniform distribution of topics among the teams in a class.&lt;br /&gt;
#The current system fails to resolve the problem when many teams bid for handful of topics(among many topics) causing unnecessary additions to the waitlist.&lt;br /&gt;
#The assignment of topics is more focused on individual selection and ‘sign up time’. Factors such as team size are not considered which are important while assigning a topic to the team and potentially can reduce many issues faced by the current system. &lt;br /&gt;
&lt;br /&gt;
To address the above mentioned issues, we have designed an ‘intelligent assignment of topics’ system which tries to address the issues faced by the current system.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Introduction &amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expertiza ==&lt;br /&gt;
&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;ref&amp;gt;[http://expertiza.ncsu.edu/ Expertiza]&amp;lt;/ref&amp;gt; is a project developed using [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails ]&amp;lt;/ref&amp;gt; platform. It provides features like peer review, team assignments and submission of projects. This can be achieved by submitting code base, URL of hosted code on remote server and Wiki submissions. It is an open source application and the code can be cloned from [https://github.com/expertiza/expertiza github]&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza github]&amp;lt;/ref&amp;gt;. This application provides an efficient way to manage assignments, grades and reviews. This makes the process easier and faster when the class strength is large.&lt;br /&gt;
&lt;br /&gt;
Expertiza is supported by National Science Foundation under Grant No. 0536558. Additional funding from the NCSU [http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;ref&amp;gt;[http://litre.ncsu.edu/ Learning in a Technology-Rich Environment (LITRE)]&amp;lt;/ref&amp;gt; program, the NCSU Faculty Center for Teaching and Learning, the NCSU STEM Initiative, and the Center for Advanced Computing and Communication.&lt;br /&gt;
&lt;br /&gt;
==Existing signup process==&lt;br /&gt;
The signup process for group projects is observed by most students to be a troublesome task  in expertiza. The current sign up process for topics is based on [http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/First-come,_first-served FCFS]&amp;lt;/ref&amp;gt; basis, where a student who signs up for a topic of his/her choice first, gets it. We have discovered some pitfalls with the current ‘topic assignment’ system in Expertiza which arises due to the below mentioned factors.  Due to these reasons, we now try to propose an intelligent system which can addresses many issues faced with the current Expertiza system.&lt;br /&gt;
&lt;br /&gt;
== Pitfalls with the current system ==&lt;br /&gt;
#One student can sign up only for a single topic. In cases where many topics are available, a student is forced to choose a single topic among many available topics which can be a difficult task. To select a single topic which best fits his/her choice among many available topics requires a pre-study of all topics prior to the signup process. Such a pre-requirement is not fulfilled by most  students, which results in a student signing up for a topic which he/she has randomly selected OR because it was among the only available topics.&lt;br /&gt;
#If a student is not able to sign up for a topic of his choice, he can waitlist himself for all the remaining topics, which causes unnecessary traffic in the waitlist queue of a topic. &lt;br /&gt;
#If all the teams choose a handful of topics among many topics, it would also result in unnecessary additions in the waitlist queue for those few topics resulting in a situation where all the topics are not uniformly distributed among all the teams&lt;br /&gt;
#Before, signing up, if more than one student forms a team and if each student belonging to the same team tries to signup for different topics, than those topics are allotted to individual students resulting in a situation where a team can hold more than one topic. Thus other teams are forced to choose from remaining topics which eventually results in longer waitlists.&lt;br /&gt;
&lt;br /&gt;
After observing the above problems with the existing method of ‘topic assignment’ in expertiza, we have proposed and implemented an ‘intelligent assignment of topics’ method to overcome all the shortcomings of the existing system in expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous work ==&lt;br /&gt;
Previously in 2012, to address this issue of expertiza, a team proposed a possible solution of [https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ ‘lottery based topic assignment’]&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit#heading=h.5cgh9aixuut7/ Lottery based topic assignment]&amp;lt;/ref&amp;gt; algorithm. The algorithm works by considering every team as strength of 1, representing the student in the team. After sign up the topic would be allotted to the team based on a lottery system where a team is randomly selected for every topic. However this method failed to address the following issues:&lt;br /&gt;
#It did not consider the case where a team could be of more than one member, hence it allowed every team member to bid for different topics resulting in the same problem as mentioned in point (4) of Pitfalls with the current system.&lt;br /&gt;
#The topics were awarded based on a Lottery system and not based on any other criteria which resulted in topic assignment to be a game of luck factor rather than on individual’s choice.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt; Design Workflow &amp;lt;/b&amp;gt;=&lt;br /&gt;
To address the issues faced by both, the current system and lottery based system, we propose a solution based on ‘intelligent team assignment’ algorithm. The algorithm is based on two important factors:&lt;br /&gt;
&lt;br /&gt;
#Team strength&lt;br /&gt;
#Priority order of the topics submitted by the team.&lt;br /&gt;
&lt;br /&gt;
The algorithm works on bidding process which can be explained as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Before the bidding process ==&lt;br /&gt;
#Initially, every student is a team of 1 member. Before the bidding process takes place, students can merge their teams to form a larger team. The person to whom they have merged becomes the team owner/captain.&lt;br /&gt;
#Every team is given x bids(x is calculated based on the total class strength and total topics proposed), that they can place on each topic of their choice in a priority order where 1 being the highest priority.&lt;br /&gt;
#Every topic is allowed ‘p’ number of maximum bids after which the topic is waitlisted in the system.&lt;br /&gt;
#Teams can also place their bids on waitlisted topics. However, every topic has a threshold ‘q’ which signifies the maximum waitlisted bids allowed for each topic.&lt;br /&gt;
#Thus, if the combined threshold of ‘p+q’ bids for a topic is reached then the topic is no longer available for bidding unless the topic is dropped by a team which reduces the ‘p+q’ threshold value.&lt;br /&gt;
&lt;br /&gt;
== During Bidding Process ==&lt;br /&gt;
#Every team can place their bids on the available topics. Since every team is given ‘x’ bids, each team can bid for ‘x’ topics and list their bids in a priority order.&lt;br /&gt;
#A team can also place their bids on  waitlisted topics. The maximum allowed bids for waitlisted topics is ‘y’ where y is some portion of bids taken from total bids(x) allowed for each team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== After the Bidding Process ==&lt;br /&gt;
#After the bidding process is complete, the teams can continue to merge to form larger teams.&lt;br /&gt;
#If team A merges with team B, the bids of team A would be lost.&lt;br /&gt;
#The merging of the teams is allowed till the topic assignment date when the teams would finally be assigned the topics by running an algorithm.&lt;br /&gt;
#The teams can also change their submitted topic priority order any number of times before running the ‘topic assignment’ algorithm. &lt;br /&gt;
&lt;br /&gt;
 The algorithm assigns the topic to each teams based on the following factors:&lt;br /&gt;
&lt;br /&gt;
# The team which is close to or has maximum possible team strength has a higher probability of winning the topic they had placed their bid on.&lt;br /&gt;
# For a team which satisfies condition(1), a topic would be assigned to the team based on the priority order of the bids that the team specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
#As each team can place their bids on the available topics based on their topic priority. Hence every team gets to choose more than one topic of their choice.&lt;br /&gt;
&lt;br /&gt;
#As every topic has a maximum number of allowed bids, after which the topic is no longer available for bidding, this method addresses the issue where many teams choose only a handful topics among all topics. &lt;br /&gt;
&lt;br /&gt;
#As the maximum allowed bids for waitlisting a topic is also limited for every team, hence the issue of unnecessary additions to waitlist is resolved by this method.&lt;br /&gt;
&lt;br /&gt;
#The teams are assigned topics based on modified [http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Stable_marriage_problem/ Stable marriage problem]&amp;lt;/ref&amp;gt; algorithm which considers factors such as team size and priority ensuring that the topics are no longer assigned based on FCFS basis. Thus this method addresses the most important issue where a topic is not assigned to the team just because the team was late to sign up for the topic as compared to the other teams.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Requirements&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
1) The instructor should be able to create assignments which can utilize intelligent assignment of teams. (It is an optional feature)&lt;br /&gt;
&lt;br /&gt;
2) The instructor should be able to set the maximum number of bids a team can make. Defaulted to 3.&lt;br /&gt;
&lt;br /&gt;
3) The teams should be able place bids on different topics limited to the number set by the instructor for these assignments&lt;br /&gt;
&lt;br /&gt;
4) The teams should be able to prioritize their bids.&lt;br /&gt;
&lt;br /&gt;
5) The instructor should be able to kick off the intelligent assignment of teams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Sequence Diagram&amp;lt;/b&amp;gt;=&lt;br /&gt;
[[File:E1475.Sequence Diagram.png|frame|center|Fig 1. Sequence Diagram]]&lt;br /&gt;
Fig 1. shows the sequence diagram for this feature. The diagram shows the sequences exclusive to this feature. Therefore, this assumes that the assignment/exercise has already been created. &lt;br /&gt;
Once the assignment is created, the instructor can enable the 'intelligent assignment of teams' feature for the particular assignment. Enabling this feature would give the students(or teams) a view to place bids on the topics they like. They can associate each bid with a priority. Once the deadline has passed, the instructor can kickoff the process which performs the automatic assignment. This would in turn start assigning teams with topics based on their bid preferences.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Use Cases&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;UML Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
The intelligent assignment controller is dependent on the ''AssignmentTopicController'' and other models like - ''Assignment'', ''AssignmentTopic'' and ''Team''. When the instructor starts the intelligent assignment of topics to teams, ''IntelligentAssignmentController'' triggers the assignment algorithm.&lt;br /&gt;
&lt;br /&gt;
The students interact with ''AssignmentTopicView'' which lists down all the topics for the assignment and allows students to bid for topics with priority. ''AssignmentTopicController'' is responsible for recording all the bids and priorities correctly.&lt;br /&gt;
&lt;br /&gt;
Following is the UML diagram of the O-O design focusing only on the component related to intelligent assignment of topics to teams.&lt;br /&gt;
&lt;br /&gt;
[[File: UML_Design.png|UML Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;Database Design&amp;lt;/b&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
In order to meet other solution requirement, new tables are added. The following diagram represents the new tables in [http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation Crow Foot's Notation]&amp;lt;/ref&amp;gt;. The ''user'' table mentioned is not new and is present only to explain the field - ''ownerId''.&lt;br /&gt;
&lt;br /&gt;
Earlier, all the information in ''AssignmentTopic'' and ''AssignmentTopicMetadata'' tables were in a single table called ''signup_topics''. However, there was lot of data redundancy observed and we also required to add an extra field in the table ''signup_topics''. Therefore, we decided to store the topics related to an assignment according to the diagram. One caveat to this design is that all the topics for an assignment are considered equal in terms of category, maximum bids allowed and maximum bids in waiting list.&lt;br /&gt;
&lt;br /&gt;
The table ''bid'' is supposed to store all the bids on the topics with their priority. The owner of the bid will be recorded too. Current requirement is to have only one bid per topic by an owner. Therefore, we could have ''(ownerId, topicId)'' pair as the primary key. However, in order to support multiple bids in a future sceario, we have used a field ''id'' as the primary key.&lt;br /&gt;
&lt;br /&gt;
Apart from the mentioned new tables, we will be using pre-existing tables to meet our requirements and design.&lt;br /&gt;
&lt;br /&gt;
[[File: DatabaseDesign.png|Database Design|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;b&amp;gt;References&amp;lt;/b&amp;gt;=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/oss_E1462_nms&amp;diff=91549</id>
		<title>CSC/ECE 517 Fall 2014/oss E1462 nms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/oss_E1462_nms&amp;diff=91549"/>
		<updated>2014-11-06T06:48:51Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Using Routing Helpers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Expertiza - Refactoring SurveyResponsesController=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Expertiza&amp;lt;ref name=&amp;quot;expertiza&amp;gt;''Expertiza'' http://wikis.lib.ncsu.edu/index.php/Expertiza&amp;lt;/ref&amp;gt; is an open source web portal for the use of both students and professors. Expertiza allows us to create reusable learning objects through peer review. It allows project submission, team creation and the submission of almost any document type, including URLs and wiki pages. Students can access their pending and finished assignments, they can do peer reviews on several topics and projects. It is developed on Ruby on Rails platform. More information on Expertiza can be found [https://github.com/expertiza/expertiza here]. The source code has been forked and cloned for making modifications to the to survey responses controller. &lt;br /&gt;
&lt;br /&gt;
This wiki provides an insight into our contributions to the OSS Expertiza application, focusing on Refactoring the SurveyResponses Controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;projectLinks&amp;quot; style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:expertiza_logo.jpg|center]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | '''Expertiza project links'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactored Instance'''&lt;br /&gt;
| http://152.46.18.142/:3000&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''username= &amp;quot;user2&amp;quot;&amp;lt;br /&amp;gt;password= &amp;quot;password&amp;quot;'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Original Instance'''&lt;br /&gt;
| http://152.46.19.10:3000/&lt;br /&gt;
|-&lt;br /&gt;
| '''Repository link'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | https://github.com/nmpedema/expertiza &amp;lt;ref&amp;gt;[https://github.com/nmpedema/expertiza Forked repository]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Pull request'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | https://github.com/expertiza/expertiza/pull/448 &amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza/pull/448 Pull request]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Refactoring in Ruby==&lt;br /&gt;
Refactoring helps to&amp;lt;ref&amp;gt;http://www.refactoringinruby.com/&amp;lt;/ref&amp;gt;&lt;br /&gt;
*Understand what led to poor code design&lt;br /&gt;
*Fix code which is difficult to understand&lt;br /&gt;
*Express each idea “once and only once”&lt;br /&gt;
*Recognize missing or inadequately formed classes&lt;br /&gt;
*Simplify overly complex relationships between classes&lt;br /&gt;
*Achieve the right balance of responsibilities among objects&lt;br /&gt;
*Make code easier to test and more maintainable&lt;br /&gt;
&lt;br /&gt;
===Code Smells===&lt;br /&gt;
We identified the following categories of code smells in the helper module:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Fat Classes&amp;lt;/b&amp;gt;: No class should be fat. Ever. There is no need for your controllers, models or views to be fat; this shows laziness, as there's been no thought given to the application's design outside of deciding to use a particular framework.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Bad Class names&amp;lt;/b&amp;gt;: A good class name is expected to adhere to the Ruby style and design style guidelines. It is expected to convey a reasonable amount of functionality handled. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Lengthy Definitions&amp;lt;/b&amp;gt;: These are the methods that have too many responsibilities and collaborators. As a result of which, their overall length has grown too long reducing the maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Duplicated Code&amp;lt;/b&amp;gt;: These are those pieces of code that does almost the same functionality of some other piece of code leading to a bad design style. They are usually too error prone since not everyone identifies all the code responsible for the same task and does the changes whenever the need arises.&lt;br /&gt;
&lt;br /&gt;
===Refactoring Techniques===&lt;br /&gt;
There are many documented refactoring techniques, and a few common ones are below.&amp;lt;ref&amp;gt;http://www.integralist.co.uk/posts/refactoring-techniques/&amp;lt;/ref&amp;gt;&lt;br /&gt;
*'''Rename Class''': Controllers as per Ruby conventions should be plural.&lt;br /&gt;
*'''Using Helper classes''': No class should be containing lot of code, a better practice is to have all active record queries with in the model and in order to keep as much as Ruby code out of the views, helpers are used. Helpers are the only methods you can access, other than instance methods for an instance you have access to.&lt;br /&gt;
*'''Extract Method''':  It consists of breaking up long methods by shifting overly complex chunks of code into new methods which have very descriptive identifiers.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
&lt;br /&gt;
This class creates surveys and records the responses which can be viewed. On submitting the responses, the scores and comments are posted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Classes :&amp;lt;/b&amp;gt; SurveyResponsesController.rb&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;What it does : &amp;lt;/b&amp;gt;Creates surveys, submitting surveys, views responses, posts scores and comments.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;What has to be changed : &amp;lt;/b&amp;gt;&lt;br /&gt;
* Pluralize the class SurveyResponseController to SurveyResponsesController&lt;br /&gt;
* Changing declarations of Arrays and Hashes,removing commented out code&lt;br /&gt;
* Use of routing helpers instead of hardcoded URLs&lt;br /&gt;
* Move active record queries to the model or another class&lt;br /&gt;
* Reducing the number of instance variables per action to one&lt;br /&gt;
&lt;br /&gt;
==Modification to Existing Code==&lt;br /&gt;
&lt;br /&gt;
===Pluralize Controller Class===&lt;br /&gt;
* A new survey_responses_controller.rb file is added : As per Ruby on Rails convention, controller names get pluralized while model names are singular. So, the controller name becomes survey_responses_controller instead of survey_response_controller for SurveyResponse modelclass.&lt;br /&gt;
&lt;br /&gt;
===Ruby 1.9 standards for Array and Hashes===&lt;br /&gt;
&lt;br /&gt;
*Modified declarations of Arrays and Hashes&lt;br /&gt;
Before Refactoring :&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
  @responses = Array.new&lt;br /&gt;
    &lt;br /&gt;
#view_responses&lt;br /&gt;
  this_response_survey = Hash.new  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
  @responses = []&lt;br /&gt;
    &lt;br /&gt;
#view_responses&lt;br /&gt;
  this_response_survey = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Active Record Queries in Model Class===&lt;br /&gt;
&lt;br /&gt;
Controllers are best at parsing the inputs, they call the appropriate models, and then format the outputs. It is desirable to have a skinny controller responsible for parsing inputs and models doing actual validation. A bunch of Active Record queries that existed in survey_responses_controller have been moved to SurveyResponse model. &lt;br /&gt;
&lt;br /&gt;
Before Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
     if !params[:course_eval]&lt;br /&gt;
      surveylist = SurveyResponse.where( [&amp;quot;assignment_id = ? and survey_id = ?&amp;quot;, params[:id], survey.id])&lt;br /&gt;
    else&lt;br /&gt;
      surveylist = SurveyResponse.where( [&amp;quot;survey_deployment_id = ? and survey_id = ?&amp;quot;, params[:id], survey.id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
SurveyResponse.get_survey_list and SurveyResponse.get_survey_list_with_deploy_id methods have been created in SurveyResponse model for active record operations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     #view_responses&lt;br /&gt;
     if !params[:course_eval]&lt;br /&gt;
      survey_list = SurveyResponse.get_survey_list(params[:id], survey.id)&lt;br /&gt;
     else&lt;br /&gt;
      survey_list = SurveyResponse.get_survey_list_with_deploy_id( params[:id], survey.id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reduce Instance Variables===&lt;br /&gt;
It desirable not to have more than one instance variables in a controller action as it indicates increased coupling. Our goal should be reducing coupling as much as possible and view should have direct access to as few instance variables as possible. &lt;br /&gt;
&lt;br /&gt;
Before Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    for question in @questions&lt;br /&gt;
    @new = SurveyResponse.new&lt;br /&gt;
    @new.survey_id = @survey_id&lt;br /&gt;
    @new.question_id = question.id&lt;br /&gt;
    @new.assignment_id = @assignment_id&lt;br /&gt;
    @new.survey_deployment_id=params[:survey_deployment_id]&lt;br /&gt;
    @new.email = params[:email]&lt;br /&gt;
    @new.score = @scores[question.id.to_s]&lt;br /&gt;
    @new.comments = @comments[question.id.to_s]&lt;br /&gt;
    @new.save&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if !params[:survey_deployment_id]&lt;br /&gt;
    @surveys = SurveyHelper::get_assigned_surveys(@assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for question in @questions&lt;br /&gt;
    SurveyResponseHelper::persist_survey(@survey_id, question.id, @assignment_id, params[:survey_deployment_id], params[:email])&lt;br /&gt;
  end&lt;br /&gt;
  if !params[:survey_deployment_id]&lt;br /&gt;
    surveys = SurveyHelper::get_assigned_surveys(@assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using Routing Helpers===&lt;br /&gt;
Creation of a resourceful route will also expose a number of helpers to the controllers in the application. We modified the routes.rb file to include all the actions in the controller.&lt;br /&gt;
&lt;br /&gt;
resources :survey_response do&lt;br /&gt;
    collection do&lt;br /&gt;
        get :view_responses&lt;br /&gt;
        get :begin_survey&lt;br /&gt;
        get :comments&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
The resourceful routes generated the helpers given below:&lt;br /&gt;
&lt;br /&gt;
    view_responses_survey_response_index_path  returns /survey_response/view_responses&lt;br /&gt;
&lt;br /&gt;
    begin_survey_survey_response_index_path  returns /survey_response/begin_survey&lt;br /&gt;
&lt;br /&gt;
    comments_survey_response_index_path  returns /survey_response/comments&lt;br /&gt;
&lt;br /&gt;
===Code Clean up===&lt;br /&gt;
Comments and extra spaces have been removed and conventions have been followed to enhance readability of the code.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Testing was performed by running 2 different VCL instances one with the original code and the other with the re-factored code. While performing the manual testing we noticed that when new course evaluations are created, the survey participants are random users and participants selection is not based on the courses. However, while displaying the pending course evaluations in the course evaluation list view, the courses are taken into consideration. Because of this difference we were not able to submit survey responses and view them.&lt;br /&gt;
In below images we have shown that the output after refactoring and output without re-factoring for all actions in the SurveyResponsesController.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! View of Refactored Begin Survey&lt;br /&gt;
! View of Original Begin Survey&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Begin_survey_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:Begin_survey_original.png|500px|frame|left| ]]&lt;br /&gt;
Begin Survey action was broken in the original source code, we made fixes to make the functionality work.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored Course Evaluation Survey&lt;br /&gt;
! View of Original Course Evaluation Survey&lt;br /&gt;
|-&lt;br /&gt;
| [[File:course_evaluation.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:course_evaluation.png|500px|frame|left| ]]&lt;br /&gt;
The Course Evaluation action works as expected after refactoring&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored View Responses&lt;br /&gt;
! View of Original View Responses&lt;br /&gt;
|-&lt;br /&gt;
| [[File:view_responses_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:view_responses.png|500px|frame|left| ]]&lt;br /&gt;
The View Response action was broken and fix is made to display the functionality properly.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored Pending Course Evaluations&lt;br /&gt;
! View of Original Pending Course Evaluations&lt;br /&gt;
|-&lt;br /&gt;
| [[File:pending_course_evaluation_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:pending_course_evaluation_refactored.png|500px|frame|left| ]]&lt;br /&gt;
Pending course evaluation works as expected after code re-factoring&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Response Comments Re-factored&lt;br /&gt;
! View of Original Response Comments Re-factored&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Response_comments_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:Response_comments_original.png|500px|frame|left| ]]&lt;br /&gt;
The action for View Response comments was not routed properly, necessary changes have been made to call the appropriate action&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Further Reading==&lt;br /&gt;
*[http://www.refactoringinruby.com/ Refactoring In Ruby]&lt;br /&gt;
*[http://refactoring.com/ Refactoring]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/oss_E1462_nms&amp;diff=91548</id>
		<title>CSC/ECE 517 Fall 2014/oss E1462 nms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/oss_E1462_nms&amp;diff=91548"/>
		<updated>2014-11-06T06:42:14Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Expertiza - Refactoring SurveyResponsesController=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Expertiza&amp;lt;ref name=&amp;quot;expertiza&amp;gt;''Expertiza'' http://wikis.lib.ncsu.edu/index.php/Expertiza&amp;lt;/ref&amp;gt; is an open source web portal for the use of both students and professors. Expertiza allows us to create reusable learning objects through peer review. It allows project submission, team creation and the submission of almost any document type, including URLs and wiki pages. Students can access their pending and finished assignments, they can do peer reviews on several topics and projects. It is developed on Ruby on Rails platform. More information on Expertiza can be found [https://github.com/expertiza/expertiza here]. The source code has been forked and cloned for making modifications to the to survey responses controller. &lt;br /&gt;
&lt;br /&gt;
This wiki provides an insight into our contributions to the OSS Expertiza application, focusing on Refactoring the SurveyResponses Controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;projectLinks&amp;quot; style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:expertiza_logo.jpg|center]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | '''Expertiza project links'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactored Instance'''&lt;br /&gt;
| http://152.46.18.142/:3000&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''username= &amp;quot;user2&amp;quot;&amp;lt;br /&amp;gt;password= &amp;quot;password&amp;quot;'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Original Instance'''&lt;br /&gt;
| http://152.46.19.10:3000/&lt;br /&gt;
|-&lt;br /&gt;
| '''Repository link'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | https://github.com/nmpedema/expertiza &amp;lt;ref&amp;gt;[https://github.com/nmpedema/expertiza Forked repository]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Pull request'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | https://github.com/expertiza/expertiza/pull/448 &amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza/pull/448 Pull request]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Refactoring in Ruby==&lt;br /&gt;
Refactoring helps to&amp;lt;ref&amp;gt;http://www.refactoringinruby.com/&amp;lt;/ref&amp;gt;&lt;br /&gt;
*Understand what led to poor code design&lt;br /&gt;
*Fix code which is difficult to understand&lt;br /&gt;
*Express each idea “once and only once”&lt;br /&gt;
*Recognize missing or inadequately formed classes&lt;br /&gt;
*Simplify overly complex relationships between classes&lt;br /&gt;
*Achieve the right balance of responsibilities among objects&lt;br /&gt;
*Make code easier to test and more maintainable&lt;br /&gt;
&lt;br /&gt;
===Code Smells===&lt;br /&gt;
We identified the following categories of code smells in the helper module:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Fat Classes&amp;lt;/b&amp;gt;: No class should be fat. Ever. There is no need for your controllers, models or views to be fat; this shows laziness, as there's been no thought given to the application's design outside of deciding to use a particular framework.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Bad Class names&amp;lt;/b&amp;gt;: A good class name is expected to adhere to the Ruby style and design style guidelines. It is expected to convey a reasonable amount of functionality handled. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Lengthy Definitions&amp;lt;/b&amp;gt;: These are the methods that have too many responsibilities and collaborators. As a result of which, their overall length has grown too long reducing the maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Duplicated Code&amp;lt;/b&amp;gt;: These are those pieces of code that does almost the same functionality of some other piece of code leading to a bad design style. They are usually too error prone since not everyone identifies all the code responsible for the same task and does the changes whenever the need arises.&lt;br /&gt;
&lt;br /&gt;
===Refactoring Techniques===&lt;br /&gt;
There are many documented refactoring techniques, and a few common ones are below.&amp;lt;ref&amp;gt;http://www.integralist.co.uk/posts/refactoring-techniques/&amp;lt;/ref&amp;gt;&lt;br /&gt;
*'''Rename Class''': Controllers as per Ruby conventions should be plural.&lt;br /&gt;
*'''Using Helper classes''': No class should be containing lot of code, a better practice is to have all active record queries with in the model and in order to keep as much as Ruby code out of the views, helpers are used. Helpers are the only methods you can access, other than instance methods for an instance you have access to.&lt;br /&gt;
*'''Extract Method''':  It consists of breaking up long methods by shifting overly complex chunks of code into new methods which have very descriptive identifiers.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
&lt;br /&gt;
This class creates surveys and records the responses which can be viewed. On submitting the responses, the scores and comments are posted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Classes :&amp;lt;/b&amp;gt; SurveyResponsesController.rb&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;What it does : &amp;lt;/b&amp;gt;Creates surveys, submitting surveys, views responses, posts scores and comments.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;What has to be changed : &amp;lt;/b&amp;gt;&lt;br /&gt;
* Pluralize the class SurveyResponseController to SurveyResponsesController&lt;br /&gt;
* Changing declarations of Arrays and Hashes,removing commented out code&lt;br /&gt;
* Use of routing helpers instead of hardcoded URLs&lt;br /&gt;
* Move active record queries to the model or another class&lt;br /&gt;
* Reducing the number of instance variables per action to one&lt;br /&gt;
&lt;br /&gt;
==Modification to Existing Code==&lt;br /&gt;
&lt;br /&gt;
===Pluralize Controller Class===&lt;br /&gt;
* A new survey_responses_controller.rb file is added : As per Ruby on Rails convention, controller names get pluralized while model names are singular. So, the controller name becomes survey_responses_controller instead of survey_response_controller for SurveyResponse modelclass.&lt;br /&gt;
&lt;br /&gt;
===Ruby 1.9 standards for Array and Hashes===&lt;br /&gt;
&lt;br /&gt;
*Modified declarations of Arrays and Hashes&lt;br /&gt;
Before Refactoring :&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
  @responses = Array.new&lt;br /&gt;
    &lt;br /&gt;
#view_responses&lt;br /&gt;
  this_response_survey = Hash.new  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
  @responses = []&lt;br /&gt;
    &lt;br /&gt;
#view_responses&lt;br /&gt;
  this_response_survey = {}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Active Record Queries in Model Class===&lt;br /&gt;
&lt;br /&gt;
Controllers are best at parsing the inputs, they call the appropriate models, and then format the outputs. It is desirable to have a skinny controller responsible for parsing inputs and models doing actual validation. A bunch of Active Record queries that existed in survey_responses_controller have been moved to SurveyResponse model. &lt;br /&gt;
&lt;br /&gt;
Before Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#view_responses&lt;br /&gt;
     if !params[:course_eval]&lt;br /&gt;
      surveylist = SurveyResponse.where( [&amp;quot;assignment_id = ? and survey_id = ?&amp;quot;, params[:id], survey.id])&lt;br /&gt;
    else&lt;br /&gt;
      surveylist = SurveyResponse.where( [&amp;quot;survey_deployment_id = ? and survey_id = ?&amp;quot;, params[:id], survey.id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
SurveyResponse.get_survey_list and SurveyResponse.get_survey_list_with_deploy_id methods have been created in SurveyResponse model for active record operations.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     #view_responses&lt;br /&gt;
     if !params[:course_eval]&lt;br /&gt;
      survey_list = SurveyResponse.get_survey_list(params[:id], survey.id)&lt;br /&gt;
     else&lt;br /&gt;
      survey_list = SurveyResponse.get_survey_list_with_deploy_id( params[:id], survey.id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reduce Instance Variables===&lt;br /&gt;
It desirable not to have more than one instance variables in a controller action as it indicates increased coupling. Our goal should be reducing coupling as much as possible and view should have direct access to as few instance variables as possible. &lt;br /&gt;
&lt;br /&gt;
Before Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    for question in @questions&lt;br /&gt;
    @new = SurveyResponse.new&lt;br /&gt;
    @new.survey_id = @survey_id&lt;br /&gt;
    @new.question_id = question.id&lt;br /&gt;
    @new.assignment_id = @assignment_id&lt;br /&gt;
    @new.survey_deployment_id=params[:survey_deployment_id]&lt;br /&gt;
    @new.email = params[:email]&lt;br /&gt;
    @new.score = @scores[question.id.to_s]&lt;br /&gt;
    @new.comments = @comments[question.id.to_s]&lt;br /&gt;
    @new.save&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if !params[:survey_deployment_id]&lt;br /&gt;
    @surveys = SurveyHelper::get_assigned_surveys(@assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After Refactoring:&lt;br /&gt;
survey_responses_controller.rb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for question in @questions&lt;br /&gt;
    SurveyResponseHelper::persist_survey(@survey_id, question.id, @assignment_id, params[:survey_deployment_id], params[:email])&lt;br /&gt;
  end&lt;br /&gt;
  if !params[:survey_deployment_id]&lt;br /&gt;
    surveys = SurveyHelper::get_assigned_surveys(@assignment_id)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using Routing Helpers===&lt;br /&gt;
Creation of a resourceful route will also expose a number of helpers to the controllers in the application. We modified the routes.rb file to include all the actions in the controller.&lt;br /&gt;
&lt;br /&gt;
resources :survey_response do&lt;br /&gt;
    collection do&lt;br /&gt;
        get :view_responses&lt;br /&gt;
        get :begin_survey&lt;br /&gt;
        get :comments&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
The resourceful routes generated the helpers given below:&lt;br /&gt;
&lt;br /&gt;
view_responses_survey_response_index_path  returns /survey_response/view_responses&lt;br /&gt;
begin_survey_survey_response_index_path  returns /survey_response/begin_survey&lt;br /&gt;
comments_survey_response_index_path  returns /survey_response/comments&lt;br /&gt;
&lt;br /&gt;
===Code Clean up===&lt;br /&gt;
Comments and extra spaces have been removed and conventions have been followed to enhance readability of the code.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Testing was performed by running 2 different VCL instances one with the original code and the other with the re-factored code. While performing the manual testing we noticed that when new course evaluations are created, the survey participants are random users and participants selection is not based on the courses. However, while displaying the pending course evaluations in the course evaluation list view, the courses are taken into consideration. Because of this difference we were not able to submit survey responses and view them.&lt;br /&gt;
In below images we have shown that the output after refactoring and output without re-factoring for all actions in the SurveyResponsesController.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! View of Refactored Begin Survey&lt;br /&gt;
! View of Original Begin Survey&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Begin_survey_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:Begin_survey_original.png|500px|frame|left| ]]&lt;br /&gt;
Begin Survey action was broken in the original source code, we made fixes to make the functionality work.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored Course Evaluation Survey&lt;br /&gt;
! View of Original Course Evaluation Survey&lt;br /&gt;
|-&lt;br /&gt;
| [[File:course_evaluation.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:course_evaluation.png|500px|frame|left| ]]&lt;br /&gt;
The Course Evaluation action works as expected after refactoring&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored View Responses&lt;br /&gt;
! View of Original View Responses&lt;br /&gt;
|-&lt;br /&gt;
| [[File:view_responses_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:view_responses.png|500px|frame|left| ]]&lt;br /&gt;
The View Response action was broken and fix is made to display the functionality properly.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Re-factored Pending Course Evaluations&lt;br /&gt;
! View of Original Pending Course Evaluations&lt;br /&gt;
|-&lt;br /&gt;
| [[File:pending_course_evaluation_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:pending_course_evaluation_refactored.png|500px|frame|left| ]]&lt;br /&gt;
Pending course evaluation works as expected after code re-factoring&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! View of Response Comments Re-factored&lt;br /&gt;
! View of Original Response Comments Re-factored&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Response_comments_refactored.png|500px|frame|left| ]]&lt;br /&gt;
| [[File:Response_comments_original.png|500px|frame|left| ]]&lt;br /&gt;
The action for View Response comments was not routed properly, necessary changes have been made to call the appropriate action&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Further Reading==&lt;br /&gt;
*[http://www.refactoringinruby.com/ Refactoring In Ruby]&lt;br /&gt;
*[http://refactoring.com/ Refactoring]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87637</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87637"/>
		<updated>2014-09-20T02:28:44Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Features of Lift Web Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is an open source software licensed under an Apache 2.0 license. Lift 2.5 is the latest stable version released and the Lift community has already started development for Lift 3.0. The source code can be found of the GitHub repository.&amp;lt;ref name=github&amp;gt;[https://github.com/lift/framework Lift Source Code]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Lift borrows from the best of existing frameworks, providing: &lt;br /&gt;
*Seaside’s highly granular sessions and security.&lt;br /&gt;
*Rails’s fast flash-to-bang.&lt;br /&gt;
*Django’s “more than just CRUD is included”.&lt;br /&gt;
*Wicket’s designer-friendly templating style.&amp;lt;ref name=wiki&amp;gt;[https://www.assembla.com/spaces/liftweb/wiki/Home Lift Developers' wiki]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lift is built on top of the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&amp;lt;ref name=liftweb&amp;gt;[http://liftweb.net/ Lift Official HomePage]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87616</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87616"/>
		<updated>2014-09-20T02:15:44Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is an open source software licensed under an Apache 2.0 license. Lift 2.5 is the latest stable version released and the Lift community has already started development for Lift 3.0. The source code can be found of the GitHub repository.&amp;lt;ref name=github&amp;gt;[https://github.com/lift/framework Lift Source Code]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Lift borrows from the best of existing frameworks, providing: &lt;br /&gt;
*Seaside’s highly granular sessions and security.&lt;br /&gt;
*Rails’s fast flash-to-bang.&lt;br /&gt;
*Django’s “more than just CRUD is included”.&lt;br /&gt;
*Wicket’s designer-friendly templating style.&amp;lt;ref name=wiki&amp;gt;[https://www.assembla.com/spaces/liftweb/wiki/Home Lift Developers' wiki]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lift is built on top of the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87612</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87612"/>
		<updated>2014-09-20T02:13:49Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is an open source software licensed under an Apache 2.0 license. Lift 2.5 is the latest stable version released and the Lift community has already started development for Lift 3.0. The source code can be found of the GitHub repository.&amp;lt;ref name=github&amp;gt;[https://github.com/lift/framework Lift Source Code]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Lift borrows from the best of existing frameworks, providing: &lt;br /&gt;
*Seaside’s highly granular sessions and security.&lt;br /&gt;
*Rails’s fast flash-to-bang.&lt;br /&gt;
*Django’s “more than just CRUD is included”.&lt;br /&gt;
*Wicket’s designer-friendly templating style.&amp;lt;ref name=github&amp;gt;[https://www.assembla.com/spaces/liftweb/wiki/Home Lift Developers' wiki]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lift is built on top of the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87610</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87610"/>
		<updated>2014-09-20T02:13:03Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is an open source software licensed under an Apache 2.0 license. Lift 2.5 is the latest stable version released and the Lift community has already started development for Lift 3.0. The source code can be found of the GitHub repository.&amp;lt;ref name=github&amp;gt;[https://github.com/lift/framework Lift Source Code]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Lift borrows from the best of existing frameworks, providing: &lt;br /&gt;
*Seaside’s highly granular sessions and security.&lt;br /&gt;
*Rails’s fast flash-to-bang.&lt;br /&gt;
*Django’s “more than just CRUD is included”.&lt;br /&gt;
*Wicket’s designer-friendly templating style.&amp;lt;ref name=github&amp;gt;[https://www.assembla.com/spaces/liftweb/wiki/Home Lift Developers' wiki]&lt;br /&gt;
&lt;br /&gt;
Lift is built on top of the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87604</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87604"/>
		<updated>2014-09-20T02:09:23Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is an open source software licensed under an Apache 2.0 license. Lift 2.5 is the latest stable version released and the Lift community has already started development for Lift 3.0. The source code can be found of the GitHub repository.&lt;br /&gt;
Lift borrows from the best of existing frameworks, providing: &lt;br /&gt;
*Seaside’s highly granular sessions and security&lt;br /&gt;
*Rails’s fast flash-to-bang&lt;br /&gt;
*Django’s “more than just CRUD is included”&lt;br /&gt;
*Wicket’s designer-friendly templating style&lt;br /&gt;
Lift is built on top of the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87585</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87585"/>
		<updated>2014-09-20T01:52:26Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Lift Web Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87584</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87584"/>
		<updated>2014-09-20T01:52:10Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Features of Lift Web Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=overview&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access&lt;br /&gt;
&lt;br /&gt;
*   '''Developer centric:''' Lift apps are fast to build, concise and easy to maintain and can be developed in totally designer friendly way.&lt;br /&gt;
&lt;br /&gt;
*  '''Scalable:''' Lift apps are high performance and scale in the real world to handle the high volume of traffic.&lt;br /&gt;
&lt;br /&gt;
*  ''' Modular:''' Lift apps can benefit from, easy to integrate, pre built modules&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87533</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87533"/>
		<updated>2014-09-20T01:35:55Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&amp;lt;ref name=explore&amp;gt;[http://www.liftweb.net/lift_overview Lift Overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLoading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87505</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87505"/>
		<updated>2014-09-20T01:27:14Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot; -- Novell&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87500</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87500"/>
		<updated>2014-09-20T01:24:09Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level&lt;br /&gt;
      features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87494</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87494"/>
		<updated>2014-09-20T01:22:18Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. &lt;br /&gt;
      Strong, expressive typing and higher-level features like the built-in Comet support allow you to &lt;br /&gt;
      focus on innovating instead of the plumbing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87490</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87490"/>
		<updated>2014-09-20T01:21:41Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;Lift is the kind of web framework that enables you as a developer to concentrate on the big picture. Strong, expressive typing and higher-level features like the built-in Comet support allow you to focus on innovating instead of the plumbing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87467</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87467"/>
		<updated>2014-09-20T01:14:09Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of it's own novel ideas. This combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87456</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87456"/>
		<updated>2014-09-20T01:10:55Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
==Introduction==&lt;br /&gt;
Lift is a powerful web framework designed to make the most powerful techniques easily accessible while keeping the overall framework simple and flexible. Lift has picked some of the best ideas from a number of other frameworks while creating some of the novel ideas. The combination of solid foundation and new techniques makes Lift a powerful framework. The clear separation of presentation content and logic based on the concept of Model View Controller pattern is one of the key strengths of the framework&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
Lift is designed to leverage the Scala programming language. Scala is a relatively new language which compiles to Java bytecode and runs on the JVM. Scala was developed by Martin Odersky. Since lift is built on Scala, the vast ecosystem of Java libraries can be leveraged for the web development like any other Java based web framework. Lift also uses the extensive XML library support and processing capabilities of the Scala language.&lt;br /&gt;
&lt;br /&gt;
==Features of Lift Web Framework ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87348</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87348"/>
		<updated>2014-09-20T00:31:50Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
&lt;br /&gt;
==Features of Lift ==&lt;br /&gt;
*   '''LazyLodading:''' Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
*  '''Parallel Page rendering:''' Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
*   '''Comet and Ajax support:''' Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
*   '''Wiring:''' The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
*   '''Security:''' Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87336</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=87336"/>
		<updated>2014-09-20T00:26:13Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;br /&gt;
&lt;br /&gt;
==Features of Lift ==&lt;br /&gt;
#   LazyLodading: Lift supports lazy loading of a snippet. This is useful when a snippet may take a long time to render, but it is required to return the page to the browser quickly.&lt;br /&gt;
&lt;br /&gt;
#   Parallel Page rendering: Executing multiple snippets in parallel is possible in Lift. Multiple jobs or processes can be spawned and run in parallel. However only when all the tasks or jobs are complete the final page render is sent back to the browser.&lt;br /&gt;
&lt;br /&gt;
#   Comet and Ajax support: Comet along with Ajax supports the asynchronous updates from user to the server or from server back to the user.&lt;br /&gt;
&lt;br /&gt;
#   Wiring: The relationship between different elements on a page is defined through Lift Wiring. When any element on a page changes, the dependent items are displayed on the next HTTP response.&lt;br /&gt;
&lt;br /&gt;
#   Security: Lift apps are not vulnerable to the common security concerns. Lift has built-in safeguards to combat vulnerabilities like Injection, XSS, Direct Object references and URL access  &lt;br /&gt;
&lt;br /&gt;
== Lift Web Framework ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt; [[File:LiftArchDiagram.jpg]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
#	LiftCore: This is the web processor of the framework which handles the following functions.&lt;br /&gt;
##	Request/Response&lt;br /&gt;
##	Rendering Pipeline&lt;br /&gt;
##	Invoking User Functions&lt;br /&gt;
#	LiftRules : Lift Configuration&lt;br /&gt;
#	LiftSession: Inherent Session State.&lt;br /&gt;
#	S: stateful context for request/response lifecycle.&lt;br /&gt;
#	SiteMap: contains web pages for the lift application.&lt;br /&gt;
#	SHtml: helper functions for XHtml.&lt;br /&gt;
#	Views: Views as XML content. Allows composing views from not only html files but other contexts too.&lt;br /&gt;
#	LiftResponse: Abstraction of response sent to the client.&lt;br /&gt;
#	Comet: allows sending asynchronous content to browser.&lt;br /&gt;
#	ORM: A specialized library.&lt;br /&gt;
#	HTTP Auth: provides control over authentication model.&lt;br /&gt;
#	JS API: JavaScript abstraction layer.&amp;lt;ref name=explore&amp;gt;[http://exploring.liftweb.net/master/index-9.html Exploring Lift Framework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== Set Up on Eclipse ===&lt;br /&gt;
&lt;br /&gt;
#	Download “Scala IDE for Eclipse” : http://scala-ide.org/&lt;br /&gt;
#	Install plugin in Eclipse from this update site : http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site&lt;br /&gt;
#	Once the plugin is installed restart Eclipse&lt;br /&gt;
#	Install sbteclipse  by adding the following to projects/plugins.sbt in your Lift Project: &amp;lt;code&amp;gt; addSbtPlugin(&amp;quot;com.typesafe.sbteclipse&amp;quot; % &amp;quot;sbteclipse-plugin&amp;quot; % &amp;quot;2.5.0&amp;quot;) &amp;lt;/code&amp;gt;&lt;br /&gt;
#	You can then create Eclipse project files (.project and .classpath) by entering the following into the SBT prompt: &amp;lt;code&amp;gt; eclipse &amp;lt;/code&amp;gt;&amp;lt;ref name=cookbook&amp;gt;[http://cookbook.liftweb.net/ The Lift Cookbook]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Web Application Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Making a SiteMap entry ===&lt;br /&gt;
&lt;br /&gt;
Every page on the site needs a SiteMap entry.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def sitemap(): SiteMap = SiteMap(&lt;br /&gt;
  Menu(&amp;quot;Home&amp;quot;) / &amp;quot;index&amp;quot;,&lt;br /&gt;
  Menu(&amp;quot;Second Page&amp;quot;) / &amp;quot;second&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Creating the view ===&lt;br /&gt;
Create an HTML file that corresponds to the sitemap entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta content=&amp;quot;text/html; charset=UTF-8&amp;quot; http-equiv=&amp;quot;content-type&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;div id=&amp;quot;main&amp;quot; class=&amp;quot;lift:surround?with=default&amp;amp;at=content&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        Hi, I'm a page that contains the time:&lt;br /&gt;
        &amp;lt;span class=&amp;quot;lift:TimeNow&amp;quot;&amp;gt;??? some time&amp;lt;/span&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        And a button: &amp;lt;button class=&amp;quot;lift:ClickMe&amp;quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 3 : Creating the Snippet ===&lt;br /&gt;
&lt;br /&gt;
A snippet can be thought of as a controller which has rules for transforming the section of your template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package code&lt;br /&gt;
package snippet&lt;br /&gt;
&lt;br /&gt;
import net.liftweb._&lt;br /&gt;
import util._&lt;br /&gt;
import Helpers._&lt;br /&gt;
&lt;br /&gt;
object TimeNow {&lt;br /&gt;
  def render = &amp;quot;* *&amp;quot; #&amp;gt; now.toString&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;ref name=simplylift&amp;gt;[http://simply.liftweb.net/ Simply Lift]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages ==&lt;br /&gt;
#	Built on Scala which is a powerful functional language.&lt;br /&gt;
#	Multiple Component support : Divides the controls into snippets which can be used together on a single page thereby not coupling a page with a controller.&lt;br /&gt;
#	CSS Binding : allows to navigate the HTML Dom tree.&lt;br /&gt;
#	Native Javascript/Ajax Support&lt;br /&gt;
#	Out-of-box Security.&lt;br /&gt;
#	Lazy Loading &amp;amp; Parallel Page rendering : Lift shows automatic spinners on area still being loaded, components are able to load over multiple thread at the same time.&amp;lt;ref name=benefits&amp;gt;[http://blog.fliptop.com/blog/2013/03/10/why-lift-webframework-is-my-favorite/ Why Lift Webframework is my favorite.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Disadvantages ==&lt;br /&gt;
#	Lots of state kept in session.&lt;br /&gt;
#	Learning Curve as no more MVC.&lt;br /&gt;
&amp;lt;ref name=quora&amp;gt;[http://www.quora.com/What-are-the-advantages-and-disadvantages-of-writing-a-web-application-in-Scala-using-Lift  Comparison on Quora]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=85749</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 4 wl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_4_wl&amp;diff=85749"/>
		<updated>2014-09-16T17:00:39Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: Created page with &amp;quot;WEB DEVELOPMENT USING LIFT&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WEB DEVELOPMENT USING LIFT&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=85748</id>
		<title>CSC/ECE 517 Fall 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=85748"/>
		<updated>2014-09-16T16:59:14Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE_517_Fall_2014/sample_page]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a 22 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 19 mx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 3 zq]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 lf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 wl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a a7 ch]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 25 jf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 os]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 15 gs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 10 hu]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 10 kv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 21 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 21 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 26 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 6 rl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 2 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 16 av]]&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=85747</id>
		<title>CSC/ECE 517 Fall 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=85747"/>
		<updated>2014-09-16T16:58:26Z</updated>

		<summary type="html">&lt;p&gt;Nmpedema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE_517_Fall_2014/sample_page]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a 22 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 19 mx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 3 zq]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 lf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 lf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a a7 ch]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 25 jf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 os]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 15 gs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 10 hu]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 10 kv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 21 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 21 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 26 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 6 rl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 2 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 16 av]]&lt;/div&gt;</summary>
		<author><name>Nmpedema</name></author>
	</entry>
</feed>