<?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=Zxie4</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=Zxie4"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Zxie4"/>
	<updated>2026-09-29T03:09:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=97135</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=97135"/>
		<updated>2015-05-05T17:05:00Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Set topics staggered deadline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
'''Controller'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/5c7c8579b6fe44e19f96183af43fab26cd26d1d1/app/controllers/sign_up_sheet_controller.rb sign_up_sheet_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb]&lt;br /&gt;
&lt;br /&gt;
'''Model'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/142a9134a18bd7cc552c6937fe5c93a1e0f4947d/app/models/assignment_form.rb assignment_form.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/72b61129c70a88d1c1ae814a53cb83b6a15a3fa8/app/models/assignment.rb assignment.rb]&lt;br /&gt;
&lt;br /&gt;
'''View'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/3443fe119ee4ae02c676131b07cd42c2771f88e5/app/views/sign_up_sheet/add_signup_topics_staggered.html.erb add_signup_topics_staggered.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/651176622bff84b09c7de9f745a246279501deb8/app/views/tree_display/actions/_assignments_actions.html.erb _assignments_actions.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/f2495041c0d66ee5d35c3da23d45e043072f7a1c/app/views/sign_up_sheet/_table_header.html.erb _table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
=='''Design Pattern'''==&lt;br /&gt;
* '''MVC'''&lt;br /&gt;
**Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller. ''Model–view–controller''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
**We need to modify model, view and controller in order to fix this functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Publish-subscribe'''&lt;br /&gt;
**In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers. Instead, published messages are characterized into classes, without knowledge of what, if any, subscribers there may be. Similarly, subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. ''Publish–subscribe pattern''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** When instructor set an assignment as staggered-dealine assignment, in theory, all the students will know.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Analysis'''==&lt;br /&gt;
* After discussing with professor, the &amp;quot;sign up sheet&amp;quot; icon in assignment pop up panel should be moved. Because that icon has the same functionality as &amp;quot;topic&amp;quot; panel in assignment edit window. These work has already done by [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2015/oss_E1509_lds OSS1509]. So we have to move all the staggered-deadline realted code to the [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb] and [https://github.com/expertiza/expertiza/blob/rails4/app/views/assignments/edit.html.erb assignments/edit.html.erb].&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]''' Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''Workflow'''==&lt;br /&gt;
&lt;br /&gt;
==='''Set topics staggered deadline'''===&lt;br /&gt;
At very beginning, we find that the type of &amp;lt;code&amp;gt;due_date&amp;lt;/code&amp;gt; variable &amp;lt;code&amp;gt;SignUpTopics&amp;lt;/code&amp;gt;. However, we found that many attributes used not belonging to &amp;lt;code&amp;gt;SignUpTopics&amp;lt;/code&amp;gt; class. So we decide to use hash tables instead. In order to keep update the staggered deadline, we put this variable in session. We also comprehended the relationship of corresponding tables. The original due dates are stored in &amp;lt;code&amp;gt;due_date&amp;lt;/code&amp;gt; table. And staggered-deadlines are stored in &amp;lt;code&amp;gt;TopicDeadline&amp;lt;/code&amp;gt; table. This table also stores different deadline types.&lt;br /&gt;
&lt;br /&gt;
Below is &amp;lt;code&amp;gt;save_topic_deadlines&amp;lt;/code&amp;gt; method after refactoring.&lt;br /&gt;
 def save_topic_deadlines&lt;br /&gt;
  #session[:duedates] stores all original duedates info&lt;br /&gt;
  #due_dates stores staggered duedates&lt;br /&gt;
  due_dates = params[:due_date]&lt;br /&gt;
  topics = SignUpTopic.where(assignment_id: params[:assignment_id])&lt;br /&gt;
  review_rounds = Assignment.find(params[:assignment_id]).get_review_rounds&lt;br /&gt;
  # j represents the review rounds&lt;br /&gt;
  j = 0&lt;br /&gt;
  topics.each { |topic|&lt;br /&gt;
    for i in 1..review_rounds&lt;br /&gt;
      topic_deadline_type_subm = DeadlineType.find_by_name('submission').id&lt;br /&gt;
      topic_deadline_subm = TopicDeadline.where(topic_id: session[:duedates][j]['id'].to_i, deadline_type_id: topic_deadline_type_subm, round: i).first&lt;br /&gt;
      topic_deadline_subm.update_attributes({'due_at' =&amp;gt; due_dates[session[:duedates][j]['id'].to_s + '_submission_' + i.to_s + '_due_date']})&lt;br /&gt;
      flash[:error] = &amp;quot;Please enter a valid &amp;quot; + (i &amp;gt; 1 ? &amp;quot;Resubmission deadline &amp;quot; + (i-1).to_s : &amp;quot;Submission deadline&amp;quot;) if topic_deadline_subm.errors.length &amp;gt; 0&lt;br /&gt;
      topic_deadline_type_rev = DeadlineType.find_by_name('review').id&lt;br /&gt;
      topic_deadline_rev = TopicDeadline.where(topic_id: session[:duedates][j]['id'].to_i, deadline_type_id: topic_deadline_type_rev, round:i).first&lt;br /&gt;
      topic_deadline_rev.update_attributes({'due_at' =&amp;gt; due_dates[session[:duedates][j]['id'].to_s + '_review_' + i.to_s + '_due_date']})&lt;br /&gt;
      flash[:error] = &amp;quot;Please enter a valid Review deadline &amp;quot; + (i &amp;gt; 1 ? (i-1).to_s : &amp;quot;&amp;quot;) if topic_deadline_rev.errors.length &amp;gt; 0&lt;br /&gt;
    end&lt;br /&gt;
    topic_deadline_subm = TopicDeadline.where(topic_id: session[:duedates][j]['id'], deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
    topic_deadline_subm.update_attributes({'due_at' =&amp;gt; due_dates[session[:duedates][j]['id'].to_s + '_submission_' + (review_rounds+1).to_s + '_due_date']})&lt;br /&gt;
    flash[:error] = &amp;quot;Please enter a valid Meta review deadline&amp;quot; if topic_deadline_subm.errors.length &amp;gt; 0&lt;br /&gt;
    j = j + 1&lt;br /&gt;
  }&lt;br /&gt;
  redirect_to_assignment_edit(params[:assignment_id])&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==='''Save topics dependency and show dependency graph'''===&lt;br /&gt;
In edit signup sheet for assignment, we want to save topic dependency and show the depandency graph, as show below:&lt;br /&gt;
[[File:save_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
In order to show the dependency graph, we must first save topics dependency and save the topic dependency graph under &amp;lt;code&amp;gt; public/assets/staggered_deadline_assignment_graph &amp;lt;/code&amp;gt; path. We first add new method in 'due_date' model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def self.assign_start_due_date(assignment_id, set_of_topics)&lt;br /&gt;
&lt;br /&gt;
    #Remember, in create_common_start_time_topics function we reversed the graph so reverse it back&lt;br /&gt;
    set_of_topics = set_of_topics.reverse&lt;br /&gt;
&lt;br /&gt;
    set_of_topics_due_dates = Array.new&lt;br /&gt;
    i=0&lt;br /&gt;
    days_between_submissions = Assignment.find(assignment_id)['days_between_submissions'].to_i&lt;br /&gt;
    set_of_topics.each { |set_of_topic|&lt;br /&gt;
      set_of_due_dates = nil&lt;br /&gt;
      if i==0&lt;br /&gt;
        #take the first set from the table which user stores&lt;br /&gt;
        set_of_due_dates = DueDate.where(assignment_id)&lt;br /&gt;
        offset = 0&lt;br /&gt;
      else&lt;br /&gt;
        set_of_due_dates = TopicDeadline.where(set_of_topics[i-1][0])&lt;br /&gt;
        set_of_due_dates.sort_by { |a, b| a.due_at &amp;lt;=&amp;gt; b.due_at }&lt;br /&gt;
        offset = days_between_submissions&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      set_of_topic.each { |topic_id|&lt;br /&gt;
        #if the due dates have already been created and the save dependency is being clicked,&lt;br /&gt;
        #then delete existing n create again&lt;br /&gt;
        prev_saved_due_dates = TopicDeadline.where(topic_id)&lt;br /&gt;
&lt;br /&gt;
        #Only if there is a dependency for the topic&lt;br /&gt;
        if !prev_saved_due_dates.nil?&lt;br /&gt;
          num_due_dates = prev_saved_due_dates.length&lt;br /&gt;
          #for each due date in the current topic he want to compare it to the previous due date&lt;br /&gt;
          for x in 0..num_due_dates - 1&lt;br /&gt;
            #we don't want the old date to move earlier in time so we save it as the new due date and destroy the old one  &lt;br /&gt;
            if DateTime.parse(set_of_due_dates[x].due_at.to_s) + offset.to_i &amp;lt; DateTime.parse(prev_saved_due_dates[x].due_at.to_s)&lt;br /&gt;
              set_of_due_dates[x] = prev_saved_due_dates[x]&lt;br /&gt;
              offset = 0&lt;br /&gt;
            end&lt;br /&gt;
            prev_saved_due_dates[x].destroy&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        set_of_due_dates.each { |due_date|&lt;br /&gt;
          create_topic_deadline(due_date, offset, topic_id)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      i = i+1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, change the &amp;lt;code&amp;gt;save_topic_dependencies&amp;lt;/code&amp;gt; method in &amp;lt;code&amp;gt; sign_up_sheet_controller.rb &amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  - redirect_to_sign_up(params[:assignment_id])&lt;br /&gt;
  + redirect_to :action =&amp;gt; 'add_signup_topics_staggered', :id =&amp;gt; params[:assignment_id] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we use &amp;lt;code&amp;gt;RGL:Graph#write_to_graphic_file&amp;lt;/code&amp;gt; method to turn the dependency graph into &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file, we need to install graphviz in our gems. Otherwise, the RGL will uses &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; files as an intermediary format to produce image formats. If we download the &amp;lt;code&amp;gt;GraphViz&amp;lt;/code&amp;gt; packege, RGL will invoke it to produce a &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gem 'graphviz' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, after we click the &amp;lt;code&amp;gt;Save dependency&amp;lt;/code&amp;gt; button, and click &amp;lt;code&amp;gt;show dependency graph&amp;lt;/code&amp;gt; button, the dependency graph is shown below:&lt;br /&gt;
[[File:show_denpendency.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
==='''Test'''===&lt;br /&gt;
Since we have done several modifications to the Expertiza program, some new tests are needed to test the features.&lt;br /&gt;
We use the stub to simulate an authorized login (as instructor).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ApplicationController.any_instance.stub(:current_role_name).and_return('Instructor')&lt;br /&gt;
ApplicationController.any_instance.stub(:undo_link).and_return(TRUE)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each time the program executes the &amp;lt;code&amp;gt;current_role_name&amp;lt;/code&amp;gt; function, it gets &amp;quot;instructor&amp;quot;.&lt;br /&gt;
In the test, we mainly test two things: staggered assignments and their corresponding dependency graph.&lt;br /&gt;
* Test the staggered assignment&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
it &amp;quot;should be able to create topic for assignment&amp;quot; do&lt;br /&gt;
  get :create, id: @assignment.id, topic: {topic_name: &amp;quot;New Topic&amp;quot;, max_choosers: 2, topic_identifier: &amp;quot;Ch1&amp;quot;, category: &amp;quot;Programming&amp;quot;}&lt;br /&gt;
  expect(response).should redirect_to(edit_assignment_path(@assignment.id) + &amp;quot;#tabs-5&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
it &amp;quot;should be able to edit topic&amp;quot; do&lt;br /&gt;
  get :edit, id: @topic.id&lt;br /&gt;
  expect(response).to be_success&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
it &amp;quot;should be able to delete topic&amp;quot; do&lt;br /&gt;
  delete :destroy, id: @topic.id, assignment_id: @assignment.id&lt;br /&gt;
  expect(response).should redirect_to edit_assignment_path(@assignment.id) + &amp;quot;#tabs-5&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test the dependency graph.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
it &amp;quot;should be able to generate topic dependency&amp;quot; do&lt;br /&gt;
    post :save_topic_dependencies, assignment_id: @assignment.id&lt;br /&gt;
    expect(File).to exist(&amp;quot;public/assets/staggered_deadline_assignment_graph/graph_#{@assignment.id}.jpg&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
it &amp;quot;should be able to detect cycles&amp;quot; do&lt;br /&gt;
  post :save_topic_dependencies, assignment_id: @assignment.id,&lt;br /&gt;
       ('topic_dependencies_' + @topic1.id.to_s)=&amp;gt;{&amp;quot;dependent_on&amp;quot;=&amp;gt;[@topic2.id.to_s]},&lt;br /&gt;
       ('topic_dependencies_' + @topic2.id.to_s)=&amp;gt;{&amp;quot;dependent_on&amp;quot;=&amp;gt;[@topic1.id.to_s]}&lt;br /&gt;
  expect(flash[:error]).to eq(&amp;quot;There may be one or more cycles in the dependencies. Please correct them&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Deploy on VCL'''===&lt;br /&gt;
&lt;br /&gt;
* Visit http://vcl.ncsu.edu/ &amp;gt; Make a Reservation&lt;br /&gt;
* Select Ruby on Rails / Expertiza from the &amp;quot;Please select the environment ...&amp;quot; dropdown, select a duration, and then click Create Reservation&lt;br /&gt;
* Once the reservation is available, click Connect&lt;br /&gt;
* Follow the instructions on the connect screen (connect via SSH and then VNC). Connecting to SSH starts up VNC, the graphical environment to which you will connect.&lt;br /&gt;
* When connecting for the first time, it will prompt you for a password to access your (VNC) desktop. You can use any password, and it will be saved for later sessions.&lt;br /&gt;
* Follow the instructions given to connect to VNC. It is recommended to use [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CB0QFjAA&amp;amp;url=https%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fvnc%25C2%25AE-viewer-for-google-ch%2Fiabmpiboiopbgfabjmgeedhcmjenhbla&amp;amp;ei=LEY7Veq8C8GNNrvhgegI&amp;amp;usg=AFQjCNGxB1W4GwZrwQWHyBfik1cbjvXMkw VNC Viewer for Google Chrome].&lt;br /&gt;
* Once connected to VNC, you should see Rubymine running.&lt;br /&gt;
* Open a terminal (Applications &amp;gt; Accessories &amp;gt; Terminal), try hitting &amp;lt;ctrl&amp;gt;-C to kill pending task if your terminal does not work properly.&lt;br /&gt;
* Ensure you have at least 20M disk quota available: fs lq . You can allocate more space at https://sysnews.ncsu.edu/tools-bin/usmdb-quota&lt;br /&gt;
* Clone the git repository: git clone (expertiza repository URL)&lt;br /&gt;
* Change to the directory (cd expertiza). You may create a &amp;quot;database.yml&amp;quot; file based on &amp;quot;database.yml.example&amp;quot;.&lt;br /&gt;
* Use rvm use (ruby version) to switch to proper ruby version. Then run bundle install (you may need to downgrade the bundler to avoid bundle install failure) and rake db:migrate to set up development environment.&lt;br /&gt;
* Use &amp;quot;rails s -b 0.0.0.0&amp;quot; to start server which allows the access outside VCL by using url: VCL_ip:3000.&lt;br /&gt;
&lt;br /&gt;
=='''Related materials'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96943</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96943"/>
		<updated>2015-04-25T08:16:35Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Deploy on VCL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
'''Controller'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/5c7c8579b6fe44e19f96183af43fab26cd26d1d1/app/controllers/sign_up_sheet_controller.rb sign_up_sheet_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb]&lt;br /&gt;
&lt;br /&gt;
'''Model'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/142a9134a18bd7cc552c6937fe5c93a1e0f4947d/app/models/assignment_form.rb assignment_form.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/72b61129c70a88d1c1ae814a53cb83b6a15a3fa8/app/models/assignment.rb assignment.rb]&lt;br /&gt;
&lt;br /&gt;
'''View'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/3443fe119ee4ae02c676131b07cd42c2771f88e5/app/views/sign_up_sheet/add_signup_topics_staggered.html.erb add_signup_topics_staggered.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/651176622bff84b09c7de9f745a246279501deb8/app/views/tree_display/actions/_assignments_actions.html.erb _assignments_actions.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/f2495041c0d66ee5d35c3da23d45e043072f7a1c/app/views/sign_up_sheet/_table_header.html.erb _table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
=='''Design Pattern'''==&lt;br /&gt;
* '''MVC'''&lt;br /&gt;
**Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller. ''Model–view–controller''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
**We need to modify model, view and controller in order to fix this functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Publish-subscribe'''&lt;br /&gt;
**In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers. Instead, published messages are characterized into classes, without knowledge of what, if any, subscribers there may be. Similarly, subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. ''Publish–subscribe pattern''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** When instructor set an assignment as staggered-dealine assignment, in theory, all the students will know.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Analysis'''==&lt;br /&gt;
* After discussing with professor, the &amp;quot;sign up sheet&amp;quot; icon in assignment pop up panel should be moved. Because that icon has the same functionality as &amp;quot;topic&amp;quot; panel in assignment edit window. These work has already done by [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2015/oss_E1509_lds OSS1509]. So we have to move all the staggered-deadline realted code to the [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb] and [https://github.com/expertiza/expertiza/blob/rails4/app/views/assignments/edit.html.erb assignments/edit.html.erb].&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]''' Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''Workflow'''==&lt;br /&gt;
&lt;br /&gt;
==='''Set topics staggered deadline'''===&lt;br /&gt;
&lt;br /&gt;
==='''Save topics dependency and show dependency graph'''===&lt;br /&gt;
In edit signup sheet for assignment, we want to save topic dependency and show the depandency graph, as show below:&lt;br /&gt;
[[File:save_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
In order to show the dependency graph, we must first save topics dependency and save the topic dependency graph under &amp;lt;code&amp;gt; public/assets/staggered_deadline_assignment_graph &amp;lt;/code&amp;gt; path. We first add new method in 'due_date' model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def self.assign_start_due_date(assignment_id, set_of_topics)&lt;br /&gt;
&lt;br /&gt;
    #Remember, in create_common_start_time_topics function we reversed the graph so reverse it back&lt;br /&gt;
    set_of_topics = set_of_topics.reverse&lt;br /&gt;
&lt;br /&gt;
    set_of_topics_due_dates = Array.new&lt;br /&gt;
    i=0&lt;br /&gt;
    days_between_submissions = Assignment.find(assignment_id)['days_between_submissions'].to_i&lt;br /&gt;
    set_of_topics.each { |set_of_topic|&lt;br /&gt;
      set_of_due_dates = nil&lt;br /&gt;
      if i==0&lt;br /&gt;
        #take the first set from the table which user stores&lt;br /&gt;
        set_of_due_dates = DueDate.where(assignment_id)&lt;br /&gt;
        offset = 0&lt;br /&gt;
      else&lt;br /&gt;
        set_of_due_dates = TopicDeadline.where(set_of_topics[i-1][0])&lt;br /&gt;
        set_of_due_dates.sort_by { |a, b| a.due_at &amp;lt;=&amp;gt; b.due_at }&lt;br /&gt;
        offset = days_between_submissions&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      set_of_topic.each { |topic_id|&lt;br /&gt;
        #if the due dates have already been created and the save dependency is being clicked,&lt;br /&gt;
        #then delete existing n create again&lt;br /&gt;
        prev_saved_due_dates = TopicDeadline.where(topic_id)&lt;br /&gt;
&lt;br /&gt;
        #Only if there is a dependency for the topic&lt;br /&gt;
        if !prev_saved_due_dates.nil?&lt;br /&gt;
          num_due_dates = prev_saved_due_dates.length&lt;br /&gt;
          #for each due date in the current topic he want to compare it to the previous due date&lt;br /&gt;
          for x in 0..num_due_dates - 1&lt;br /&gt;
            #we don't want the old date to move earlier in time so we save it as the new due date and destroy the old one  &lt;br /&gt;
            if DateTime.parse(set_of_due_dates[x].due_at.to_s) + offset.to_i &amp;lt; DateTime.parse(prev_saved_due_dates[x].due_at.to_s)&lt;br /&gt;
              set_of_due_dates[x] = prev_saved_due_dates[x]&lt;br /&gt;
              offset = 0&lt;br /&gt;
            end&lt;br /&gt;
            prev_saved_due_dates[x].destroy&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        set_of_due_dates.each { |due_date|&lt;br /&gt;
          create_topic_deadline(due_date, offset, topic_id)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      i = i+1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, change the &amp;lt;code&amp;gt;save_topic_dependencies&amp;lt;/code&amp;gt; method in &amp;lt;code&amp;gt; sign_up_sheet_controller.rb &amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
492 - redirect_to_sign_up(params[:assignment_id])&lt;br /&gt;
493 + redirect_to :action =&amp;gt; 'add_signup_topics_staggered', :id =&amp;gt; params[:assignment_id] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we use &amp;lt;code&amp;gt;RGL:Graph#write_to_graphic_file&amp;lt;/code&amp;gt; method to turn the dependency graph into &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file, we need to install graphviz in our gems. Otherwise, the RGL will uses &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; files as an intermediary format to produce image formats. If we download the &amp;lt;code&amp;gt;GraphViz&amp;lt;/code&amp;gt; packege, RGL will invoke it to produce a &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gem 'graphviz' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, after we click the &amp;lt;code&amp;gt;Save dependency&amp;lt;/code&amp;gt; button, and click &amp;lt;code&amp;gt;show dependency graph&amp;lt;/code&amp;gt; button, the dependency graph is shown below:&lt;br /&gt;
[[File:show_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
==='''Test'''===&lt;br /&gt;
&lt;br /&gt;
==='''Deploy on VCL'''===&lt;br /&gt;
&lt;br /&gt;
* Visit http://vcl.ncsu.edu/ &amp;gt; Make a Reservation&lt;br /&gt;
* Select Ruby on Rails / Expertiza from the &amp;quot;Please select the environment ...&amp;quot; dropdown, select a duration, and then click Create Reservation&lt;br /&gt;
* Once the reservation is available, click Connect&lt;br /&gt;
* Follow the instructions on the connect screen (connect via SSH and then VNC). Connecting to SSH starts up VNC, the graphical environment to which you will connect.&lt;br /&gt;
* When connecting for the first time, it will prompt you for a password to access your (VNC) desktop. You can use any password, and it will be saved for later sessions.&lt;br /&gt;
* Follow the instructions given to connect to VNC. It is recommended to use [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CB0QFjAA&amp;amp;url=https%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fvnc%25C2%25AE-viewer-for-google-ch%2Fiabmpiboiopbgfabjmgeedhcmjenhbla&amp;amp;ei=LEY7Veq8C8GNNrvhgegI&amp;amp;usg=AFQjCNGxB1W4GwZrwQWHyBfik1cbjvXMkw VNC Viewer for Google Chrome].&lt;br /&gt;
* Once connected to VNC, you should see Rubymine running.&lt;br /&gt;
* Open a terminal (Applications &amp;gt; Accessories &amp;gt; Terminal), try hitting &amp;lt;ctrl&amp;gt;-C to kill pending task if your terminal does not work properly.&lt;br /&gt;
* Ensure you have at least 20M disk quota available: fs lq . You can allocate more space at https://sysnews.ncsu.edu/tools-bin/usmdb-quota&lt;br /&gt;
* Clone the git repository: git clone (expertiza repository URL)&lt;br /&gt;
* Change to the directory (cd expertiza). You may create a &amp;quot;database.yml&amp;quot; file based on &amp;quot;database.yml.example&amp;quot;.&lt;br /&gt;
* Use rvm use (ruby version) to switch to proper ruby version. Then run bundle install (you may need to downgrade the bundler to avoid bundle install failure) and rake db:migrate to set up development environment.&lt;br /&gt;
* Use &amp;quot;rails s -b 0.0.0.0&amp;quot; to start server which allows the access outside VCL by using url: VCL_ip:3000.&lt;br /&gt;
&lt;br /&gt;
=='''Related materials'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96942</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96942"/>
		<updated>2015-04-25T07:50:57Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Deploy on VCL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
'''Controller'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/5c7c8579b6fe44e19f96183af43fab26cd26d1d1/app/controllers/sign_up_sheet_controller.rb sign_up_sheet_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb]&lt;br /&gt;
&lt;br /&gt;
'''Model'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/142a9134a18bd7cc552c6937fe5c93a1e0f4947d/app/models/assignment_form.rb assignment_form.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/72b61129c70a88d1c1ae814a53cb83b6a15a3fa8/app/models/assignment.rb assignment.rb]&lt;br /&gt;
&lt;br /&gt;
'''View'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/3443fe119ee4ae02c676131b07cd42c2771f88e5/app/views/sign_up_sheet/add_signup_topics_staggered.html.erb add_signup_topics_staggered.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/651176622bff84b09c7de9f745a246279501deb8/app/views/tree_display/actions/_assignments_actions.html.erb _assignments_actions.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/f2495041c0d66ee5d35c3da23d45e043072f7a1c/app/views/sign_up_sheet/_table_header.html.erb _table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
=='''Design Pattern'''==&lt;br /&gt;
* '''MVC'''&lt;br /&gt;
**Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller. ''Model–view–controller''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
**We need to modify model, view and controller in order to fix this functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Publish-subscribe'''&lt;br /&gt;
**In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers. Instead, published messages are characterized into classes, without knowledge of what, if any, subscribers there may be. Similarly, subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. ''Publish–subscribe pattern''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** When instructor set an assignment as staggered-dealine assignment, in theory, all the students will know.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Analysis'''==&lt;br /&gt;
* After discussing with professor, the &amp;quot;sign up sheet&amp;quot; icon in assignment pop up panel should be moved. Because that icon has the same functionality as &amp;quot;topic&amp;quot; panel in assignment edit window. These work has already done by [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2015/oss_E1509_lds OSS1509]. So we have to move all the staggered-deadline realted code to the [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb] and [https://github.com/expertiza/expertiza/blob/rails4/app/views/assignments/edit.html.erb assignments/edit.html.erb].&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]''' Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''Workflow'''==&lt;br /&gt;
&lt;br /&gt;
==='''Set topics staggered deadline'''===&lt;br /&gt;
&lt;br /&gt;
==='''Save topics dependency and show dependency graph'''===&lt;br /&gt;
In edit signup sheet for assignment, we want to save topic dependency and show the depandency graph, as show below:&lt;br /&gt;
[[File:save_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
In order to show the dependency graph, we must first save topics dependency and save the topic dependency graph under &amp;lt;code&amp;gt; public/assets/staggered_deadline_assignment_graph &amp;lt;/code&amp;gt; path. We first add new method in 'due_date' model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def self.assign_start_due_date(assignment_id, set_of_topics)&lt;br /&gt;
&lt;br /&gt;
    #Remember, in create_common_start_time_topics function we reversed the graph so reverse it back&lt;br /&gt;
    set_of_topics = set_of_topics.reverse&lt;br /&gt;
&lt;br /&gt;
    set_of_topics_due_dates = Array.new&lt;br /&gt;
    i=0&lt;br /&gt;
    days_between_submissions = Assignment.find(assignment_id)['days_between_submissions'].to_i&lt;br /&gt;
    set_of_topics.each { |set_of_topic|&lt;br /&gt;
      set_of_due_dates = nil&lt;br /&gt;
      if i==0&lt;br /&gt;
        #take the first set from the table which user stores&lt;br /&gt;
        set_of_due_dates = DueDate.where(assignment_id)&lt;br /&gt;
        offset = 0&lt;br /&gt;
      else&lt;br /&gt;
        set_of_due_dates = TopicDeadline.where(set_of_topics[i-1][0])&lt;br /&gt;
        set_of_due_dates.sort_by { |a, b| a.due_at &amp;lt;=&amp;gt; b.due_at }&lt;br /&gt;
        offset = days_between_submissions&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      set_of_topic.each { |topic_id|&lt;br /&gt;
        #if the due dates have already been created and the save dependency is being clicked,&lt;br /&gt;
        #then delete existing n create again&lt;br /&gt;
        prev_saved_due_dates = TopicDeadline.where(topic_id)&lt;br /&gt;
&lt;br /&gt;
        #Only if there is a dependency for the topic&lt;br /&gt;
        if !prev_saved_due_dates.nil?&lt;br /&gt;
          num_due_dates = prev_saved_due_dates.length&lt;br /&gt;
          #for each due date in the current topic he want to compare it to the previous due date&lt;br /&gt;
          for x in 0..num_due_dates - 1&lt;br /&gt;
            #we don't want the old date to move earlier in time so we save it as the new due date and destroy the old one  &lt;br /&gt;
            if DateTime.parse(set_of_due_dates[x].due_at.to_s) + offset.to_i &amp;lt; DateTime.parse(prev_saved_due_dates[x].due_at.to_s)&lt;br /&gt;
              set_of_due_dates[x] = prev_saved_due_dates[x]&lt;br /&gt;
              offset = 0&lt;br /&gt;
            end&lt;br /&gt;
            prev_saved_due_dates[x].destroy&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        set_of_due_dates.each { |due_date|&lt;br /&gt;
          create_topic_deadline(due_date, offset, topic_id)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      i = i+1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, change the &amp;lt;code&amp;gt;save_topic_dependencies&amp;lt;/code&amp;gt; method in &amp;lt;code&amp;gt; sign_up_sheet_controller.rb &amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
492 - redirect_to_sign_up(params[:assignment_id])&lt;br /&gt;
493 + redirect_to :action =&amp;gt; 'add_signup_topics_staggered', :id =&amp;gt; params[:assignment_id] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we use &amp;lt;code&amp;gt;RGL:Graph#write_to_graphic_file&amp;lt;/code&amp;gt; method to turn the dependency graph into &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file, we need to install graphviz in our gems. Otherwise, the RGL will uses &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; files as an intermediary format to produce image formats. If we download the &amp;lt;code&amp;gt;GraphViz&amp;lt;/code&amp;gt; packege, RGL will invoke it to produce a &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gem 'graphviz' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, after we click the &amp;lt;code&amp;gt;Save dependency&amp;lt;/code&amp;gt; button, and click &amp;lt;code&amp;gt;show dependency graph&amp;lt;/code&amp;gt; button, the dependency graph is shown below:&lt;br /&gt;
[[File:show_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
==='''Test'''===&lt;br /&gt;
&lt;br /&gt;
==='''Deploy on VCL'''===&lt;br /&gt;
&lt;br /&gt;
* Visit http://vcl.ncsu.edu/ &amp;gt; Make a Reservation&lt;br /&gt;
* Select Ruby on Rails / Expertiza from the &amp;quot;Please select the environment ...&amp;quot; dropdown, select a duration, and then click Create Reservation&lt;br /&gt;
* Once the reservation is available, click Connect&lt;br /&gt;
* Follow the instructions on the connect screen (connect via SSH and then VNC). Connecting to SSH starts up VNC, the graphical environment to which you will connect.&lt;br /&gt;
* When connecting for the first time, it will prompt you for a password to access your (VNC) desktop. You can use any password, and it will be saved for later sessions.&lt;br /&gt;
* Follow the instructions given to connect to VNC. It is recommended to use [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CB0QFjAA&amp;amp;url=https%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fvnc%25C2%25AE-viewer-for-google-ch%2Fiabmpiboiopbgfabjmgeedhcmjenhbla&amp;amp;ei=LEY7Veq8C8GNNrvhgegI&amp;amp;usg=AFQjCNGxB1W4GwZrwQWHyBfik1cbjvXMkw VNC Viewer for Google Chrome].&lt;br /&gt;
* Once connected to VNC, you should see Rubymine running.&lt;br /&gt;
&lt;br /&gt;
=='''Related materials'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96941</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96941"/>
		<updated>2015-04-25T07:48:32Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Deploy on VCL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
'''Controller'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/5c7c8579b6fe44e19f96183af43fab26cd26d1d1/app/controllers/sign_up_sheet_controller.rb sign_up_sheet_controller.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb]&lt;br /&gt;
&lt;br /&gt;
'''Model'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/142a9134a18bd7cc552c6937fe5c93a1e0f4947d/app/models/assignment_form.rb assignment_form.rb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/72b61129c70a88d1c1ae814a53cb83b6a15a3fa8/app/models/assignment.rb assignment.rb]&lt;br /&gt;
&lt;br /&gt;
'''View'''&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/3443fe119ee4ae02c676131b07cd42c2771f88e5/app/views/sign_up_sheet/add_signup_topics_staggered.html.erb add_signup_topics_staggered.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/651176622bff84b09c7de9f745a246279501deb8/app/views/tree_display/actions/_assignments_actions.html.erb _assignments_actions.html.erb]&lt;br /&gt;
* [https://github.com/expertiza/expertiza/blob/f2495041c0d66ee5d35c3da23d45e043072f7a1c/app/views/sign_up_sheet/_table_header.html.erb _table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
=='''Design Pattern'''==&lt;br /&gt;
* '''MVC'''&lt;br /&gt;
**Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller. ''Model–view–controller''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
**We need to modify model, view and controller in order to fix this functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Publish-subscribe'''&lt;br /&gt;
**In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers. Instead, published messages are characterized into classes, without knowledge of what, if any, subscribers there may be. Similarly, subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are.&amp;lt;ref&amp;gt;[http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. ''Publish–subscribe pattern''. Wikipedia]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** When instructor set an assignment as staggered-dealine assignment, in theory, all the students will know.&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Problem Analysis'''==&lt;br /&gt;
* After discussing with professor, the &amp;quot;sign up sheet&amp;quot; icon in assignment pop up panel should be moved. Because that icon has the same functionality as &amp;quot;topic&amp;quot; panel in assignment edit window. These work has already done by [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Spring_2015/oss_E1509_lds OSS1509]. So we have to move all the staggered-deadline realted code to the [https://github.com/expertiza/expertiza/blob/rails4/app/controllers/assignments_controller.rb assignments_controller.rb] and [https://github.com/expertiza/expertiza/blob/rails4/app/views/assignments/edit.html.erb assignments/edit.html.erb].&lt;br /&gt;
&lt;br /&gt;
* In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]''' Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''Workflow'''==&lt;br /&gt;
&lt;br /&gt;
==='''Set topics staggered deadline'''===&lt;br /&gt;
&lt;br /&gt;
==='''Save topics dependency and show dependency graph'''===&lt;br /&gt;
In edit signup sheet for assignment, we want to save topic dependency and show the depandency graph, as show below:&lt;br /&gt;
[[File:save_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
In order to show the dependency graph, we must first save topics dependency and save the topic dependency graph under &amp;lt;code&amp;gt; public/assets/staggered_deadline_assignment_graph &amp;lt;/code&amp;gt; path. We first add new method in 'due_date' model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def self.assign_start_due_date(assignment_id, set_of_topics)&lt;br /&gt;
&lt;br /&gt;
    #Remember, in create_common_start_time_topics function we reversed the graph so reverse it back&lt;br /&gt;
    set_of_topics = set_of_topics.reverse&lt;br /&gt;
&lt;br /&gt;
    set_of_topics_due_dates = Array.new&lt;br /&gt;
    i=0&lt;br /&gt;
    days_between_submissions = Assignment.find(assignment_id)['days_between_submissions'].to_i&lt;br /&gt;
    set_of_topics.each { |set_of_topic|&lt;br /&gt;
      set_of_due_dates = nil&lt;br /&gt;
      if i==0&lt;br /&gt;
        #take the first set from the table which user stores&lt;br /&gt;
        set_of_due_dates = DueDate.where(assignment_id)&lt;br /&gt;
        offset = 0&lt;br /&gt;
      else&lt;br /&gt;
        set_of_due_dates = TopicDeadline.where(set_of_topics[i-1][0])&lt;br /&gt;
        set_of_due_dates.sort_by { |a, b| a.due_at &amp;lt;=&amp;gt; b.due_at }&lt;br /&gt;
        offset = days_between_submissions&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      set_of_topic.each { |topic_id|&lt;br /&gt;
        #if the due dates have already been created and the save dependency is being clicked,&lt;br /&gt;
        #then delete existing n create again&lt;br /&gt;
        prev_saved_due_dates = TopicDeadline.where(topic_id)&lt;br /&gt;
&lt;br /&gt;
        #Only if there is a dependency for the topic&lt;br /&gt;
        if !prev_saved_due_dates.nil?&lt;br /&gt;
          num_due_dates = prev_saved_due_dates.length&lt;br /&gt;
          #for each due date in the current topic he want to compare it to the previous due date&lt;br /&gt;
          for x in 0..num_due_dates - 1&lt;br /&gt;
            #we don't want the old date to move earlier in time so we save it as the new due date and destroy the old one  &lt;br /&gt;
            if DateTime.parse(set_of_due_dates[x].due_at.to_s) + offset.to_i &amp;lt; DateTime.parse(prev_saved_due_dates[x].due_at.to_s)&lt;br /&gt;
              set_of_due_dates[x] = prev_saved_due_dates[x]&lt;br /&gt;
              offset = 0&lt;br /&gt;
            end&lt;br /&gt;
            prev_saved_due_dates[x].destroy&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        set_of_due_dates.each { |due_date|&lt;br /&gt;
          create_topic_deadline(due_date, offset, topic_id)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      i = i+1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, change the &amp;lt;code&amp;gt;save_topic_dependencies&amp;lt;/code&amp;gt; method in &amp;lt;code&amp;gt; sign_up_sheet_controller.rb &amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
492 - redirect_to_sign_up(params[:assignment_id])&lt;br /&gt;
493 + redirect_to :action =&amp;gt; 'add_signup_topics_staggered', :id =&amp;gt; params[:assignment_id] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we use &amp;lt;code&amp;gt;RGL:Graph#write_to_graphic_file&amp;lt;/code&amp;gt; method to turn the dependency graph into &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file, we need to install graphviz in our gems. Otherwise, the RGL will uses &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; files as an intermediary format to produce image formats. If we download the &amp;lt;code&amp;gt;GraphViz&amp;lt;/code&amp;gt; packege, RGL will invoke it to produce a &amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gem 'graphviz' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, after we click the &amp;lt;code&amp;gt;Save dependency&amp;lt;/code&amp;gt; button, and click &amp;lt;code&amp;gt;show dependency graph&amp;lt;/code&amp;gt; button, the dependency graph is shown below:&lt;br /&gt;
[[File:show_denpendency.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
==='''Test'''===&lt;br /&gt;
&lt;br /&gt;
==='''Deploy on VCL'''===&lt;br /&gt;
&lt;br /&gt;
* Visit http://vcl.ncsu.edu/ &amp;gt; Make a Reservation&lt;br /&gt;
* Select Ruby on Rails / Expertiza from the &amp;quot;Please select the environment ...&amp;quot; dropdown, select a duration, and then click Create Reservation&lt;br /&gt;
* Once the reservation is available, click Connect&lt;br /&gt;
* Follow the instructions on the connect screen (connect via SSH and then VNC). Connecting to SSH starts up VNC, the graphical environment to which you will connect.&lt;br /&gt;
* When connecting for the first time, it will prompt you for a password to access your (VNC) desktop. You can use any password, and it will be saved for later sessions.&lt;br /&gt;
* Follow the instructions given to connect to VNC. It is recommended to use VNC Viewer for Google Chrome. &lt;br /&gt;
* Once connected to VNC, you should see Aptana RadRails running.&lt;br /&gt;
&lt;br /&gt;
=='''Related materials'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96293</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96293"/>
		<updated>2015-04-01T02:19:26Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Puzzle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]''' Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96292</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96292"/>
		<updated>2015-04-01T02:18:58Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Puzzle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'''Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96290</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96290"/>
		<updated>2015-04-01T02:18:11Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Initial Analyse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn't have a column &amp;quot;t_id&amp;quot;, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class &amp;quot;DueData&amp;quot; does exist, but it does not have column &amp;quot;topic_identifier&amp;quot; or &amp;quot;topic_name&amp;quot;. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'' 'Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96285</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96285"/>
		<updated>2015-04-01T02:16:22Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Error Message Present */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can't write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'' 'Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96281</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96281"/>
		<updated>2015-04-01T02:14:50Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Benefit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones' work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'' 'Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96280</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96280"/>
		<updated>2015-04-01T02:13:54Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would've been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'' 'Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96279</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96279"/>
		<updated>2015-04-01T02:13:22Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Documentation'''==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics&amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester's 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would’ve been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]''' In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]''' No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
'''[Professor]'' 'Basically, the staggered-deadline is set at the same time when an assignment is created. But if one team cannot hand in their work with sufficient reasons, instructor may extend the deadline of their topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
'''[Professor]''' The ''dependencies'' of topics means one topic cannot start until another topic finishes. For instance, ''Ruby'' topic must be finished before ''Rails'' topic.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96082</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96082"/>
		<updated>2015-03-31T06:46:12Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Documentation [http://wikis.lib.ncsu.edu/index.php/Expertiza] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Documentation &amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza Expertiza. Wolfwikis]&amp;lt;/ref&amp;gt;==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester’s 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would’ve been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]'''In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]'''No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96081</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96081"/>
		<updated>2015-03-31T06:42:28Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Documentation &amp;lt;ref&amp;gt;[http://wikis.lib.ncsu.edu/index.php/Expertiza]&amp;lt;/ref&amp;gt;==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics.&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester’s 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would’ve been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]'''In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]'''No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96080</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96080"/>
		<updated>2015-03-31T06:39:58Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/reports/Instructor_documentation.doc instructor manual], explaining how to create an deploy an assignment in Expertiza.&lt;br /&gt;
*An [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/instructor.swf instructor video], slightly dated, showing how to create and deploy an assignment&lt;br /&gt;
* A guide for [[Creating_Custom_Rubric]]&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_documentation.pdf PDF] presentation explaining how to submit and review an assignment with Expertiza.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/videos/student.swf video] showing how to use the system to submit and review an assignment.&lt;br /&gt;
*For students, a [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.ppt Powerpoint] or [http://research.csc.ncsu.edu/efg/expertiza/presentations/student_wiki_documentation.pdf PDF] presentation explaining how to submit and review wiki pages with Expertiza.&lt;br /&gt;
*For students, a [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.ppt Powerpoint] or [http://courses.ncsu.edu/csc517/common/homework/topic-signup-team-formation.pdf PDF] presentation explaining how to form teams and sign up for topics.&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester’s 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would’ve been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]'''In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]'''No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96079</id>
		<title>CSC/ECE 517 Spring 2015 S1524 FSZZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015_S1524_FSZZ&amp;diff=96079"/>
		<updated>2015-03-31T06:16:58Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Initial Analyse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;E1524. Refactor staggered-deadline assignments&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''==&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a web application where students can submit and peer-review learning objects (articles, code, web sites, etc). It is used in select courses at NC State and by professors at several other colleges and universities&amp;lt;ref&amp;gt;[https://github.com/expertiza/expertiza Expertiza. Github]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Staggered Deadlines===&lt;br /&gt;
Staggered deadlines involve planning alternate submission dates for papers, projects, or exams when a student has conflicting due dates for these.  The key part of staggered deadlines is the planning. Staggered deadlines are always established well in advance of the scheduled due date. It is the advanced planning of these deadlines that makes them &amp;quot;staggered deadlines&amp;quot; rather than extensions&amp;lt;ref&amp;gt;[http://pages.vassar.edu/accessingvassar/2013/01/15/difficulties-with-staggered-deadlines/ Elmichaels. ''Difficulties with Staggered Deadlines''. Jan 15, 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''Problem Statement'''==&lt;br /&gt;
==='''Background'''===&lt;br /&gt;
In this semester’s 517 class.  Wiki 1a and Wiki 1b are structured as separate assignments, with separate signup sheets, teams, and reviews.  But really, since only one of the two was done by any student, it would’ve been better to have a single assignment.  Still, some topics could be done soon after the course started, whereas others were better done after we had studied related topics in class.&lt;br /&gt;
&lt;br /&gt;
==='''Staggered-deadline Assignment'''===&lt;br /&gt;
This raises the idea of a ''staggered-deadline assignment'', where different topics have different submission and review deadlines, rather than all topics having the same deadline. &lt;br /&gt;
&lt;br /&gt;
==='''Benefit'''===&lt;br /&gt;
* '''Easy to manage.''' Because in the past, instructor has to build two separate assignments for Wiki 1a and 1b, now one assignment for Wiki is enough. &lt;br /&gt;
&lt;br /&gt;
* '''Increase flexibility.''' For instance, when an OSS team facing a much more difficult problem than other teams, instructor may postpone their deadline several days. It will make Expertiza more humanize.&lt;br /&gt;
&lt;br /&gt;
* '''Take time to do calibration.''' We find that two Wiki assignments started at Jan. 28th and ended at Feb. 25th, which takes too much time. And with staggered-deadline assignment, we can distribute less time on them. And we can take redundant time to do calibrating. Because we find that many students actually do not know how to evaluate other ones’ work, even there are some rubrics offered. So we recommend to let students grade sample assignments first, then calibrate their grading behaviors. Although it will take some time, we consider it is important to help students distinguish good assignments from common ones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Product Verion Functionality'''==&lt;br /&gt;
* In production version, instructor can set ''Submission deadline'', ''Review deadline'' and ''Metareview deadline'' for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments_M.png‎  |frame|center|Set different deadline for each topic]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Also, instructor can set the dependencies of different topics. And there is a dependency graph generated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Staggered-deadline_assignments1_M.png‎  |frame|center|Dependency graph for all topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Use Case'''==&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #1: Create staggered-deadline assignment'''&lt;br /&gt;
** '''Actor:''' Instructor&lt;br /&gt;
** '''Actions:''' &lt;br /&gt;
*** Instructor logs in Expertiza.&lt;br /&gt;
*** Instructor creates a new staggered-deadline assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #2: Peer review only'''&lt;br /&gt;
** '''Actor:''' Student finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Hand in assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
*** Write author feedback to reviewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Use Case #3: Peer review and still work on assignments'''&lt;br /&gt;
** '''Actor:''' Student not finish work for first round&lt;br /&gt;
** '''Actions:'''&lt;br /&gt;
*** Sign up topic.&lt;br /&gt;
*** Work on assignment.&lt;br /&gt;
*** Peer review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:UseCaseDiagram1_M.png‎  |frame|center|Use Case Diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Error Message Present'''==&lt;br /&gt;
* First, login expertiza, in the &amp;quot;Manage Content&amp;quot; page, create a new assignment. Then, as shown below, choose the &amp;quot;pencil&amp;quot; icon to edit the assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment1.jpg |frame|center|Assignment panel 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Check&amp;quot;Has topics?&amp;quot; and &amp;quot;Staggered deadline assignment?&amp;quot; two checkbox, and create new topics in &amp;quot;Topics&amp;quot; panel, click &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment2.jpg |frame|center|Create Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Back to the &amp;quot;Manage Content&amp;quot; page, choose the &amp;quot;Edit signup sheet&amp;quot; icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment3.jpg |frame|center|Assignment panel 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Error: can’t write unknown attribute 't_id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:assignment4.jpg |frame|center|Error]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Initial Analyse'''==&lt;br /&gt;
In &amp;quot;sign_up_sheet_controller&amp;quot;, there are several errors and confusions in function &amp;quot;add_sign_up_topic&amp;quot;. The function is used to display a page that lists all the available topics for a staggered-deadline assignment.&amp;lt;br&amp;gt; &lt;br /&gt;
See the function code below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def add_signup_topic&lt;br /&gt;
  load_add_signup_topics(params[:id])&lt;br /&gt;
&lt;br /&gt;
  @review_rounds = Assignment.find(params[:id]).get_review_rounds&lt;br /&gt;
  @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
&lt;br /&gt;
  #Use this until you figure out how to initialize this array&lt;br /&gt;
  @duedates = SignUpTopic.find_by_sql(&amp;quot;SELECT s.id as topic_id FROM sign_up_topics s WHERE s.assignment_id = &amp;quot; + params[:id].to_s)&lt;br /&gt;
&lt;br /&gt;
  unless @topics.nil?&lt;br /&gt;
    i=0&lt;br /&gt;
    @topics.each { |topic|&lt;br /&gt;
&lt;br /&gt;
      @duedates[i]['t_id'] = topic.id&lt;br /&gt;
      @duedates[i]['topic_identifier'] = topic.topic_identifier&lt;br /&gt;
      @duedates[i]['topic_name'] = topic.topic_name&lt;br /&gt;
&lt;br /&gt;
      for j in 1..@review_rounds&lt;br /&gt;
        duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('submission').id).first&lt;br /&gt;
        duedate_rev = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('review').id).first&lt;br /&gt;
        if !duedate_subm.nil? &amp;amp;&amp;amp; !duedate_rev.nil?&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
          #the topic is new. so copy deadlines from assignment&lt;br /&gt;
          set_of_due_dates = DueDate.where(assignment_id: params[:id])&lt;br /&gt;
          set_of_due_dates.each { |due_date|&lt;br /&gt;
            create_topic_deadline(due_date, 0, topic.id)&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          @duedates[i]['submission_'+ j.to_s] = DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
          @duedates[i]['review_'+ j.to_s] = DateTime.parse(duedate_rev['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
      duedate_subm = TopicDeadline.where(topic_id: topic.id, deadline_type_id:  DeadlineType.find_by_name('metareview').id).first&lt;br /&gt;
      @duedates[i]['submission_'+ (@review_rounds+1).to_s] = !(duedate_subm.nil?)?(DateTime.parse(duedate_subm['due_at'].to_s).strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)):nil&lt;br /&gt;
      i = i + 1&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main confusions are:&lt;br /&gt;
* In line 8, the variable &amp;quot;duedates&amp;quot; are declared as type &amp;quot;SignUpTopic&amp;quot;. The naming is quite confusing.&lt;br /&gt;
* In line 14, the SignUpTopic class doesn’t have a column “t_id”, it raises an error. We think it should be &amp;quot;topic_id&amp;quot;.&lt;br /&gt;
* From the code we can guess the variable &amp;quot;duedates&amp;quot; is used to store the deadline for each topic. The class “DueData” does exist, but it does not have column “topic_identifier” or “topic_name”. It only stores the deadline for a single assignment.&lt;br /&gt;
&lt;br /&gt;
=='''Puzzle'''==&lt;br /&gt;
* If there is more than one round, which means students can submit their assignments more than once, so the staggered-deadline should refer to which deadline?&lt;br /&gt;
'''[Professor]'''In a staggered-deadline assignment, there is one submission deadline and one review deadline per round.  These are always set on a per-topic basis.&lt;br /&gt;
If the view currently works (and I think it might), as soon as you make an assignment a staggered-deadline assignment, the Signup Sheet (Topics) page will have a link at the bottom to show deadlines for each topic.  Click it, and you will see a separate text box for each deadline for each topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If staggered-deadline of one assignment is even later than the second-round review, is it means that that assignment do not need peer review and go directly into meta-review stage?&lt;br /&gt;
'''[Professor]'''No, there are also separate meta-review deadlines for a staggered-deadline assignment.&lt;br /&gt;
I think in the current implementation, only submission deadlines, review deadlines, and meta-review deadlines vary by topic.  In a more complete implementation, there would be a way for ANY deadline to vary by topic.  This would include signup deadlines, drop-topic deadlines, team-formation deadlines, and any other kind of deadline that is defined later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* When to set staggered-deadline assignments? Create assignment or Before submission?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* What is the meaning of &amp;quot;dependencies&amp;quot; between topics?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92849</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92849"/>
		<updated>2015-01-29T21:23:59Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace, click start editing to start coding.&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then you can use command line to compile and run your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friends according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet on the same project, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs &amp;lt;ref&amp;gt;http://www.hongkiat.com/blog/cloud-ide-developers/&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed development is playing a more and more important role in the programmers' coordination to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92848</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92848"/>
		<updated>2015-01-29T21:22:31Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace, click start editing to start coding.&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then you can use command line to compile and run your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friends according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet on the same project, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs &amp;lt;ref&amp;gt;http://www.hongkiat.com/blog/cloud-ide-developers/&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed development is playing a more and more important role among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92847</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92847"/>
		<updated>2015-01-29T21:20:24Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace, click start editing to start coding.&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then you can use command line to compile and run your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friends according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet on the same project, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs &amp;lt;ref&amp;gt;http://www.hongkiat.com/blog/cloud-ide-developers/&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92846</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92846"/>
		<updated>2015-01-29T21:19:02Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace, click start editing to start coding.&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then you can use command line to compile and run your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet on the same project, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs &amp;lt;ref&amp;gt;http://www.hongkiat.com/blog/cloud-ide-developers/&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92845</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92845"/>
		<updated>2015-01-29T21:13:24Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs &amp;lt;ref&amp;gt;http://www.hongkiat.com/blog/cloud-ide-developers/&amp;lt;/ref&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92844</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92844"/>
		<updated>2015-01-29T21:10:05Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Technical basis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: [http://en.wikipedia.org/wiki/Front_and_back_ends front and back ends]. The frontend is usually written in Javascript, using [http://en.wikipedia.org/wiki/Ajax_(programming) AJAX] methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92843</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92843"/>
		<updated>2015-01-29T21:06:59Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Kodingen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== [https://koding.com/ Koding] ===&lt;br /&gt;
&lt;br /&gt;
Koding is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Koding is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92842</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92842"/>
		<updated>2015-01-29T21:06:29Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community.&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt; Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92840</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92840"/>
		<updated>2015-01-29T21:05:11Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Sourcekit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== [https://chrome.google.com/webstore/detail/sourcekit/iieeldjdihkpoapgipfkeoddjckopgjg Sourcekit] ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://koding.com/ Koding]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92839</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92839"/>
		<updated>2015-01-29T21:04:16Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* eXo Cloud IDE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://koding.com/ Koding]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92837</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92837"/>
		<updated>2015-01-29T21:02:23Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Codeanywhere */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&amp;lt;ref&amp;gt;http://readwrite.com/2014/06/24/distributed-development-open-source-colocation&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== [https://codeanywhere.net/ Codeanywhere] ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://koding.com/ Koding]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92835</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92835"/>
		<updated>2015-01-29T21:01:30Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://shiftedit.net/ ShiftEdit]&lt;br /&gt;
* [http://www.erbix.com/js/ Erbix]&lt;br /&gt;
* [https://super.neutrondrive.com/ Neutron IDE]&lt;br /&gt;
* [https://code.google.com/p/collide/ Collide]&lt;br /&gt;
* [http://eclipse.org/orion/ Orion]&lt;br /&gt;
* [http://pythonfiddle.com/ Python Fiddle]&lt;br /&gt;
* [https://codenvy.com/ Codenvy]&lt;br /&gt;
* [https://koding.com/ Koding]&lt;br /&gt;
* [https://www.pythonanywhere.com/ PythonAnywhere]&lt;br /&gt;
* [https://www.sourcelair.com/home sourceLair]&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92832</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92832"/>
		<updated>2015-01-29T20:49:37Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Coderun Studio&lt;br /&gt;
* ShiftEdit&lt;br /&gt;
* Akshell&lt;br /&gt;
* Erbix&lt;br /&gt;
* Neutron IDE&lt;br /&gt;
* Collide&lt;br /&gt;
* Orion&lt;br /&gt;
* Python Fiddle&lt;br /&gt;
* Codenvy&lt;br /&gt;
* Koding&lt;br /&gt;
* PythonAnywhere&lt;br /&gt;
* sourceLair&lt;br /&gt;
* YouOS&lt;br /&gt;
* [http://codebox.io Codebox]&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model. Additionally, during coding process using cloud 9, we agree to that the loading stage of cloud 9 is a bit long, not to mention we access it through a high-speed wifi. Think about team members with low network access speed, everything they see was delayed which is detrimental to the development team. Maybe the online IDE and distributed development would replace the traditional development method, but it still have long way to go.&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92830</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92830"/>
		<updated>2015-01-29T20:45:52Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Technical basis ===&lt;br /&gt;
&lt;br /&gt;
An Online IDE, like most websites, is usually composed of two pieces: a frontend and a backend. The frontend is usually written in Javascript, using AJAX methods to communicate with the backend using a HTTP API, although in some cases, a browser extension or desktop application serves as the frontend and communicates with the backend without the need for a browser. The backend takes care of creating, saving, and opening files, as well as running any terminal commands if the IDE supports it. &lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Coderun Studio&lt;br /&gt;
* ShiftEdit&lt;br /&gt;
* Akshell&lt;br /&gt;
* Erbix&lt;br /&gt;
* Neutron IDE&lt;br /&gt;
* Collide&lt;br /&gt;
* Orion&lt;br /&gt;
* Python Fiddle&lt;br /&gt;
* Codenvy&lt;br /&gt;
* Koding&lt;br /&gt;
* PythonAnywhere&lt;br /&gt;
* sourceLair&lt;br /&gt;
* YouOS&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
According to its specific advantages, Online IDE and Distributed developments is playing a more and more important role in the among the programmers' coordinating to handle various tasks. However, we can still see that most of the software companies or Network companies still prefer to the traditional development model.&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92828</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92828"/>
		<updated>2015-01-29T20:37:00Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Coderun Studio&lt;br /&gt;
* ShiftEdit&lt;br /&gt;
* Akshell&lt;br /&gt;
* Erbix&lt;br /&gt;
* Neutron IDE&lt;br /&gt;
* Collide&lt;br /&gt;
* Orion&lt;br /&gt;
* Python Fiddle&lt;br /&gt;
* Codenvy&lt;br /&gt;
* Koding&lt;br /&gt;
* PythonAnywhere&lt;br /&gt;
* sourceLair&lt;br /&gt;
* YouOS&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92827</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92827"/>
		<updated>2015-01-29T20:31:56Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
=== Kodingen ===&lt;br /&gt;
&lt;br /&gt;
Kodingen is one of the first Cloud editors to really do web-based IDEs the right way. It allows developers to code in PHP, Python, Perl and Javascript while working with popular frameworks like Django, Ruby on Rails and Node.js. Kodingen is bolstered by the rich and diverse community of users that patronize the service, which makes collaboration and sharing in the Cloud fairly convenient.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92826</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92826"/>
		<updated>2015-01-29T20:26:45Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
=== Sourcekit ===&lt;br /&gt;
&lt;br /&gt;
Sourcekit is a Textmate like lightweight programmer's text editor right inside of Chrome. It saves files directly to Dropbox. Supported languages include all the majors you'd expect, such as C/C++/C#, PHP, Python, Javascript, MySQL, Java and Ruby. As far as lean browser IDEs are concerned, Sourcekit is an extremely attractive option.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92825</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92825"/>
		<updated>2015-01-29T20:25:28Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* eXo Cloud IDE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it's a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92824</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92824"/>
		<updated>2015-01-29T20:25:03Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Codeanywhere */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it's not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
=== eXo Cloud IDE ===&lt;br /&gt;
&lt;br /&gt;
it’s a solid Cloud contender that supports the usual languages like Javascript, Ruby, Groovy, Java and HTML etc. In particular, eXo Cloud is well suited to coders who specialize in Java programming. It supports Java servlets and Java Server Pages, as well as Maven. Deployment is handled by Heroku, CloudBees, Red Hat OpenShift and Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92823</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92823"/>
		<updated>2015-01-29T20:23:21Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Codeanywhere */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== Codeanywhere ===&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it’s not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92822</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92822"/>
		<updated>2015-01-29T20:22:28Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
=== '''Codeanywhere''' ===&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it’s not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92821</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92821"/>
		<updated>2015-01-29T20:21:44Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
*'''Codeanywhere'''&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it’s not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92820</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92820"/>
		<updated>2015-01-29T20:21:12Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
'''Codeanywhere'''&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it’s not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92819</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92819"/>
		<updated>2015-01-29T20:20:32Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Some other Online IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step1: go to cloud 9 official website and you need to sign up first of all&lt;br /&gt;
[[File: Cloud9_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step2: sign in the cloud 9 and you'll see the dashboard&lt;br /&gt;
[[File: Cloud9_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step3: click the green button &amp;quot;create new space&amp;quot; on the left and you'll see various projects you can create&lt;br /&gt;
[[File: C959664B-8EBE-47B3-B6BC-C4359240B6D5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step4: Here we use C/C++ as an example to create new workspace&lt;br /&gt;
[[File: Cloud9_4.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step5: Then click the green button start editing on the up left, then you can use command line to code your first program!&lt;br /&gt;
[[File: Cloud9_5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Step6: If you want to code with other team members online, just click the share on the up right corner and invite your friend according to their usernames&lt;br /&gt;
[[File: Cloud9_6.jpeg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Step7: Then you can code with your teammates via Internet, you can see their real-time changes according to cursors with different colors&lt;br /&gt;
[[File: Cloud9_7.jpeg]]&lt;br /&gt;
&lt;br /&gt;
== Some other Online IDEs ==&lt;br /&gt;
*Codeanywhere&lt;br /&gt;
It features code highlighting and support for HTML, CSS, Javascript, PHP, MySQL and more. Thanks to the available slew of handy apps for iOS, Android and BlackBerry, this tool enables anyone to code literally anywhere. In addition, it boasts Dropbox and SFTP support, which allow coders to easily backup project files and share them with collaborators. Though it’s not the most full-featured Cloud IDE, it does what it does quite well.&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92787</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92787"/>
		<updated>2015-01-29T04:18:32Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
[https://c9.io/ Cloud9]provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.&lt;br /&gt;
&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92786</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92786"/>
		<updated>2015-01-29T04:12:46Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Here is an brief introduction of using an online IDE to conduct a real-time distributed development.&lt;br /&gt;
&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92785</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92785"/>
		<updated>2015-01-29T04:07:14Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92762</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92762"/>
		<updated>2015-01-29T02:48:28Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Pros and Cons === &lt;br /&gt;
&lt;br /&gt;
==== Benefits ====&lt;br /&gt;
*Access from anywhere or any computer (with Internet access).&lt;br /&gt;
*Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
*Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
*Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
*Help companies, especially startups save money on office facilities. &lt;br /&gt;
*Available for local resources like customer feedback&lt;br /&gt;
*More comfortable and less pressed environment which is good for innovation and inspiration&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
*Must have (good) Internet access.&lt;br /&gt;
*If not self hosted, possible outside security issues.&lt;br /&gt;
*Possible server downtime.&lt;br /&gt;
*Most do not support smart phones or tablets well.&lt;br /&gt;
*Much less business compulsion&lt;br /&gt;
*Different personal schedules makes it hard for on-time communication&lt;br /&gt;
*Less coordinative and productive (not adopted by many large companies, including Facebook)&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92747</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92747"/>
		<updated>2015-01-29T02:22:12Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Benefits and Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Benefits and Limitations === &lt;br /&gt;
&lt;br /&gt;
Pros&lt;br /&gt;
Access from anywhere or any computer (with Internet access).&lt;br /&gt;
Minimal configuration needed, no Operating Systerm restriction.&lt;br /&gt;
Allows for development from inexpensive machines, even portable devices.&lt;br /&gt;
Enable team members updated to the latest changes in code, and keep projects organized. &lt;br /&gt;
Cons&lt;br /&gt;
Must have (good) Internet access.&lt;br /&gt;
If not self hosted, possible outside security issues.&lt;br /&gt;
Possible server downtime.&lt;br /&gt;
Most do not support smart phones or tablets well.&lt;br /&gt;
&lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92745</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92745"/>
		<updated>2015-01-29T02:00:57Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Introduction to Online Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Benefits and Limitations === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92744</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92744"/>
		<updated>2015-01-29T01:59:23Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Motivation for Online IDEs and Distributed Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Online Development === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92741</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92741"/>
		<updated>2015-01-29T01:58:18Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Online IDEs and Distributed Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki] more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation for Online IDEs and Distributed Development ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Online Development === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92740</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92740"/>
		<updated>2015-01-29T01:57:46Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Online IDEs and Distributed Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. Actually, the distributed development stems from [http://en.wikipedia.org/wiki/Open-source_software open source software] community. Also the appearance of [http://en.wikipedia.org/wiki/GitHub Github] and [http://en.wikipedia.org/wiki/Wiki Wiki]s more facilitates the booming of distributed development. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation for Online IDEs and Distributed Development ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Online Development === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92712</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92712"/>
		<updated>2015-01-29T01:20:52Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Motivation for Online IDEs and Distributed Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. In addition, if a project is so huge that the “team” above may be a micro-team, and then these micro-teams construct mid-teams and finally mid-teams construct the whole team. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation for Online IDEs and Distributed Development ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online IDEs have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
With an online IDE you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online IDE, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
In the past, in order to deal with big projects, in-house collaboration is the main stream of the people cracking projects. As the world goes more international, and a growing number of software startups spring up like mushrooms in the world, people begin to work across regional bounds and be accustomed to work remotely for different purposes.  Vice versa, quite a bit of the programmers are more willing to work from home rather than being forced to relocate for demands of face-to-face discussion. Under this circumstance, online IDEs and distributed development start to step into the public's vision.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Online Development === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92704</id>
		<title>CSC/ECE 517 Spring 2015/ch1a 5 ZX</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2015/ch1a_5_ZX&amp;diff=92704"/>
		<updated>2015-01-29T01:16:38Z</updated>

		<summary type="html">&lt;p&gt;Zxie4: /* Motivation for Online IDEs and Distributed Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Online IDEs and Distributed Development'''=&lt;br /&gt;
&lt;br /&gt;
An online IDE, also known as Web IDE or cloud IDE, is an [http://en.wikipedia.org/wiki/Integrated_development_environment  integrated development environment] (IDE) that is hosted in a browser, which allows for software development or web development. An online IDE can be accessed from a web browser, such as Google Chrome or Internet Explorer, allowing for a portable work environment. An online IDE does not usually contain all of the same features as a traditional, or desktop, IDE, although all of the basic IDE features, such as syntax highlighting, are typically present.&lt;br /&gt;
&lt;br /&gt;
The idea of [http://en.wikipedia.org/wiki/Distributed_development Distributed Development] is a project development model where members in the same team spreading across geographical lines contribute to collaborate on applications or softwares and communicate through the Internet. In addition, if a project is so huge that the “team” above may be a micro-team, and then these micro-teams construct mid-teams and finally mid-teams construct the whole team. &lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1TgBtp7flIPKJwkkShgtcIkt--mtHuwVHsQX6Tpzj1rc/edit# Writing Assignment 1A]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Background ==&lt;br /&gt;
=== Motivation for Online IDEs and Distributed Development ===&lt;br /&gt;
&lt;br /&gt;
It has always been difficult for programmers to organize and work on projects across a variety of locations, computers, and devices – especially when you work in teams. When you store your code on one computer at one location, you become tied down to that one computer, finding yourself running back to that machine each time you're hit with coding inspiration. Worse, if you're working in a team, each member of the team has to send their code to every other member, each step of the way, creating organizational distractions and unnecessary delays. This is the problem that online compilers have solved, and the programming world will never be the same.&lt;br /&gt;
&lt;br /&gt;
With an online compiler you can store your code online, allowing you the freedom to program from any computer (or device) with a connection to the internet. With an online compiler, you and your team can work on the exact same set of files, regardless of where your team members are, allowing you to work better as a team and keep your projects organized.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Online Development === &lt;br /&gt;
==== Introduction to Online IDEs ====&lt;br /&gt;
==== Introduction to Distributed Development ====&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
== ==&lt;/div&gt;</summary>
		<author><name>Zxie4</name></author>
	</entry>
</feed>