<?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=Asankar3</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=Asankar3"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Asankar3"/>
	<updated>2026-05-16T14:18:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82339</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82339"/>
		<updated>2013-10-31T23:14:59Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
=='''Dynamic style additions/removals'''==&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
==='''Work done in Part 1'''===&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82338</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82338"/>
		<updated>2013-10-31T23:14:23Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
=='''Dynamic style additions/removals'''==&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
==='''Work done in Part 1'''===&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82337</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82337"/>
		<updated>2013-10-31T23:14:07Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
=='''Dynamic style additions/removals'''==&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done in Part 1'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82336</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82336"/>
		<updated>2013-10-31T23:13:24Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
==''Dynamic style additions/removals''==&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done in Part 1'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82335</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82335"/>
		<updated>2013-10-31T23:12:49Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
==''Dynamic style additions/removals''==&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
==='''Work done in Part 1'''===&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82334</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82334"/>
		<updated>2013-10-31T23:10:59Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done in Part 1'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82332</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82332"/>
		<updated>2013-10-31T23:09:53Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done in Part 1'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82331</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82331"/>
		<updated>2013-10-31T23:09:33Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
:*Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done in Part 1'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82325</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82325"/>
		<updated>2013-10-31T22:47:54Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://paulrouget.com/e/servo/ &amp;lt;/ref&amp;gt; is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82318</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82318"/>
		<updated>2013-10-31T22:44:34Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo&amp;lt;ref&amp;gt; http://www.webmonkey.com/2013/04/mozillas-servo/ &amp;lt;/ref&amp;gt; is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82309</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82309"/>
		<updated>2013-10-31T22:21:44Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Each box represents a Rust task.&lt;br /&gt;
:*Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:*Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:*White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:*Dashed lines indicate supervisor relationships.&lt;br /&gt;
:*Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=82238</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=82238"/>
		<updated>2013-10-31T04:12:47Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
:* Each box represents a Rust task.&lt;br /&gt;
:* Blue boxes represent the primary tasks in the browser pipeline.&lt;br /&gt;
:* Gray boxes represent tasks auxiliary to the browser pipeline.&lt;br /&gt;
:* White boxes represent worker tasks. Each such box represents several tasks, the precise number of which will vary with the workload.&lt;br /&gt;
:* Dashed lines indicate supervisor relationships.&lt;br /&gt;
:* Solid lines indicate communication channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82236</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 at</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_at&amp;diff=82236"/>
		<updated>2013-10-31T04:11:51Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: Created page with &amp;quot;='''Dynamic style additions/removals'''=  This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo brows...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() method in [https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs] file has been [http://en.wikipedia.org/wiki/Code_refactoring refactored] to recognize when a style element is appended in an HTML file. Whenever a style element is appended, [https://github.com/mozilla/servo/blob/master/src/components/script/html/cssparse.rs CSS parser] need to be invoked that parses through the content present within the [http://www.w3schools.com/tags/tag_style.asp style element] and renders the output to the Layout task with all the CSS rules applied on the HTML content. Previously, the CSS style rules were applied only when the rules are appended using link element  as an external stylesheet. &lt;br /&gt;
&lt;br /&gt;
'''Functionality Added :''' First the code will check whether the new child node that has been appended is a style node. If yes, A dummy URL is set into the URL variable, and the content that is present within the style tag is wrapped by &amp;quot;NodeWrapping&amp;quot; implementation and stored in a variable called &amp;quot;data&amp;quot; Then both URL and data are assigned to Inline Provenance - A member of  enum variable &amp;quot;CSSTaskNewFile&amp;quot; that CSS parser uses to differentiate between link element and style element. Then css_spawn_parser method is called which does the parsing and renders the output to the Layout Task.&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/test/html/content/test_collections.html test_collections.html]'''&lt;br /&gt;
:*'''[https://github.com/tmuthuk/servo/blob/master/src/components/script/dom/node.rs node.rs]'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013&amp;diff=82233</id>
		<title>CSC/ECE 517 Fall 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013&amp;diff=82233"/>
		<updated>2013-10-31T04:10:08Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[ CSC/ECE 517 Fall 2012/ch1 1w23 ph ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w30 nn]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w21 w]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w01 aj]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w24 nv]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w29 rkld]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w25 aras]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w30 ps]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w19 rj]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w18 bs]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w17 pk]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w22 ss]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w12 vn]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w14 st]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w08 cc]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w10 ga ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w26 as ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w27 ma ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w13 aa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w11 sv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w07 d ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w20 gq ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w03 ss ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w28 nm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w02 pp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1  1w6 zs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1  1w04 y ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w05 st ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w09 hs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w32 av ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w48 x ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w43 av]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w46 ka]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w33 aa]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w35 sa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w39 as ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w31 vm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w43 sm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w44 s ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w47 ka ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w34 fs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w40 ao ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss fmv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss vna ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss paa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss mapFeeds ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ssp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch2 0e808 nsv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss aoa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss cmh ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ans ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ssv]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E818 mra ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss SocialMediaFeeds ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E811 syn ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E804 spb ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E812 amp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss S805 ahs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E820 gzs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E816 cyy ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss M801 at ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E814 vd ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E815 saa]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E810 aas ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E805 kkn ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss M803 ana ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E802 jst ]]&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81299</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81299"/>
		<updated>2013-10-30T20:32:32Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layout''===&lt;br /&gt;
The appendchild() is modified to recognize when an element is being appended and then the sent to layour.(To be modified).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81297</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81297"/>
		<updated>2013-10-30T20:31:36Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
===''Appending an element and sending it to layour''===&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81296</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81296"/>
		<updated>2013-10-30T20:30:57Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
====''Testing Dynamic elements in HTML''====&lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81295</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81295"/>
		<updated>2013-10-30T20:30:26Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred for setting up the environment as it is simple and easy.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81292</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81292"/>
		<updated>2013-10-30T20:29:05Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
Below is a pictorial representation of the servo task communication &lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81285</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81285"/>
		<updated>2013-10-30T20:22:23Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
[[File:task.jpg|center|alt=Sample task communication diagram| Fig 1: Servo Task Communication diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Task.jpg&amp;diff=81283</id>
		<title>File:Task.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Task.jpg&amp;diff=81283"/>
		<updated>2013-10-30T20:21:01Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: Task Communication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Task Communication&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81277</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81277"/>
		<updated>2013-10-30T20:17:28Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: fil_name]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81276</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81276"/>
		<updated>2013-10-30T20:17:02Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
=='''Work done so far'''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
The following two files were modified to include the new code.&lt;br /&gt;
&lt;br /&gt;
:*'''test_collections.html'''&lt;br /&gt;
:*'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81271</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81271"/>
		<updated>2013-10-30T20:15:12Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
==''Work done so far''==&lt;br /&gt;
===''Testing Dynamic elements in HTML''=== &lt;br /&gt;
A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81268</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81268"/>
		<updated>2013-10-30T20:14:25Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
==''Work done so far''==&lt;br /&gt;
 &lt;br /&gt;
:* A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81267</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81267"/>
		<updated>2013-10-30T20:14:02Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
:*Performance. Parallel algorithms tend to involve tough trade offs and it must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
:*Data structures. Rust has new type system, specifically to enable safe parallel types and algorithms.&lt;br /&gt;
:*Language immaturity. The Rust compiler and language are yet to reach stability. Rust also has fewer libraries than C++ available. It is possible to bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
===''Work done so far''===&lt;br /&gt;
 &lt;br /&gt;
:* A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81263</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81263"/>
		<updated>2013-10-30T20:11:42Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Challenges''===&lt;br /&gt;
&lt;br /&gt;
    Performance. Parallel algorithms tend to involve tough trade offs. It's important to actually be fast. We must ensure that Rust itself has performance comparable to C++.&lt;br /&gt;
    Data structures. Rust has a fairly novel type system, specifically to enable safe parallel types and algorithms, and we have to figure out how to use it effectively.&lt;br /&gt;
    Language immaturity. The Rust compiler and language are not yet stable. Rust also has fewer libraries than C++ available; we can bind to C++ libraries, but that involves more work than simply using the C++ header files.&lt;br /&gt;
    Parallel-hostile libraries. Some third-party libraries we need don't play well in multi-threaded environments. Fonts in particular have been difficult. Even if libraries are technically thread-safe, often thread safety is achieved through a library-wide mutex lock, harming our opportunities for parallelism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
===''Work done so far''===&lt;br /&gt;
 &lt;br /&gt;
:* A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model to manipulate the HTML elements. The test demonstrates the following:&lt;br /&gt;
&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81254</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81254"/>
		<updated>2013-10-30T20:08:45Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
===''Work done so far''===&lt;br /&gt;
 &lt;br /&gt;
:* A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model. The test demonstrates the following:&lt;br /&gt;
:*appending a new link element that references a stylesheet.&lt;br /&gt;
:*appending a new style element that contains rule.&lt;br /&gt;
:*removing an existing link element that references a stylesheet.&lt;br /&gt;
:*remove an existing style element that contains rules.&lt;br /&gt;
:*modifying the content of a style element (such as removing all content).&lt;br /&gt;
:*modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81252</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81252"/>
		<updated>2013-10-30T20:07:23Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
===''Work done so far''===&lt;br /&gt;
 &lt;br /&gt;
:* A test html code that runs successfully in Firefox/chrome is created first before testing the changes in Servo. The test cases are written in Javascript using the Document Object Model. The test demonstrates the following:&lt;br /&gt;
::**appending a new link element that references a stylesheet.&lt;br /&gt;
::**appending a new style element that contains rule.&lt;br /&gt;
::**removing an existing link element that references a stylesheet.&lt;br /&gt;
::**remove an existing style element that contains rules.&lt;br /&gt;
::**modifying the content of a style element (such as removing all content).&lt;br /&gt;
::**modifying the href attribute of a link element that points at a stylesheet (such as referencing a new one that does not exist).&lt;br /&gt;
&lt;br /&gt;
:'''test_collections.html'''&lt;br /&gt;
:'''node.rs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81221</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81221"/>
		<updated>2013-10-30T19:48:12Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''==&lt;br /&gt;
===''Setting up Servo''===&lt;br /&gt;
There are two main steps to set up the environment for this project. Linux environment is preferred as the installation steps for setting up the environment as simple compared to windows.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;&lt;br /&gt;
:* [https://github.com/mozilla/servo Build Servo] &amp;lt;ref&amp;gt; https://github.com/mozilla/servo &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81212</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81212"/>
		<updated>2013-10-30T19:44:55Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for dynamically appending, removing or modifying elements that causes a visible change.&lt;br /&gt;
:*Recognize when an element is being appended and get the element to the layout.&lt;br /&gt;
:*Network requests and removal of newly added stylesheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Appendix'''&lt;br /&gt;
===''Setting up Servo''&lt;br /&gt;
There are two main steps to set up the environment for this project.&lt;br /&gt;
&lt;br /&gt;
:* [https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust Build Rust] &amp;lt;ref&amp;gt; https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust &amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* Build Servo&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81193</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81193"/>
		<updated>2013-10-30T19:31:48Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo?''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''What is this project about?''===&lt;br /&gt;
&lt;br /&gt;
This project deals mainly with communicating between tasks. &lt;br /&gt;
&lt;br /&gt;
:*Test cases for the following scenarios&lt;br /&gt;
:**Dynamically appending, removing or changing elements that causes a visible change.&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81167</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81167"/>
		<updated>2013-10-30T19:22:27Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo ''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Why is the this project about?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81161</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81161"/>
		<updated>2013-10-30T19:20:27Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo ''=== &lt;br /&gt;
&lt;br /&gt;
Servo is a research project whose goal is to develop a new Web browser engine that makes use of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races. Given that C++ is poorly suited to prevent these problems, Servo is written in [http://en.wikipedia.org/wiki/Rust_%28programming_language%29 Rust programming language]. Rust provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine.&lt;br /&gt;
&lt;br /&gt;
===''Why is the this project about?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81142</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81142"/>
		<updated>2013-10-30T19:11:20Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo ''=== &lt;br /&gt;
&lt;br /&gt;
:Servo is a research project to develop a new Web browser engine. Our goal is to create an architecture that takes advantage of parallelism at many levels while eliminating common sources of bugs and security vulnerabilities associated with incorrect memory management and data races.&lt;br /&gt;
&lt;br /&gt;
Because C++ is poorly suited to preventing these problems, Servo is written in Rust, a new language designed specifically with Servo's requirements in mind. Rust provides a task-parallel infrastructure and a strong type system that enforces memory safety and data race freedom.&lt;br /&gt;
&lt;br /&gt;
When making design decisions we will prioritize the features of the modern web platform that are amenable to high-performance, dynamic, and media-rich applications, potentially at the cost of features that cannot be optimized. We want to know what a fast and responsive web platform looks like, and to implement it.&lt;br /&gt;
&lt;br /&gt;
Servo is explicitly not aiming to create a full Web browser (except for demonstration and experimentation purposes). Rather it is focused on creating a solid, embeddable engine. Although Servo is a research project, it is designed to be &amp;quot;productizable&amp;quot;—the code that we write should be of high enough quality that it could eventually be shipped to users.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81138</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81138"/>
		<updated>2013-10-30T19:09:24Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser. Here you can find a brief description about the servo project, rust programming language, requirements of this particular project, setting up of the development environment and other relevant details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81126</id>
		<title>CSC/ECE 517 Fall 2013/oss M801 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_M801_as&amp;diff=81126"/>
		<updated>2013-10-30T19:06:37Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: Created page with &amp;quot;='''Dynamic style additions/removals'''=  This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo brows...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Dynamic style additions/removals'''=&lt;br /&gt;
&lt;br /&gt;
This article is about the project M801 - Dynamic style additions/removals, which is a part of the ongoing development on the Servo browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
==='' What is Servo ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013&amp;diff=81090</id>
		<title>CSC/ECE 517 Fall 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013&amp;diff=81090"/>
		<updated>2013-10-30T18:56:11Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[ CSC/ECE 517 Fall 2012/ch1 1w23 ph ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w30 nn]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w21 w]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w01 aj]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w24 nv]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w29 rkld]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w25 aras]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w30 ps]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w19 rj]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w18 bs]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w17 pk]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w22 ss]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w12 vn]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w14 st]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w08 cc]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w10 ga ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w26 as ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w27 ma ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w13 aa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w11 sv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w07 d ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w20 gq ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w03 ss ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w28 nm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w02 pp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1  1w6 zs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1  1w04 y ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w05 st ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w09 hs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w32 av ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w48 x ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w43 av]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w46 ka]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w33 aa]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w35 sa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w39 as ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w31 vm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w43 sm ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w44 s ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w47 ka ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w34 fs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch1 1w40 ao ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss fmv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss vna ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss paa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss mapFeeds ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ssp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/ch2 0e808 nsv ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss aoa ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss cmh ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ans ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss ssv]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E818 mra ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss SocialMediaFeeds ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E811 syn ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E804 spb ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E812 amp ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss S805 ahs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E820 gzs ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss E816 cyy ]]&lt;br /&gt;
* [[ CSC/ECE 517 Fall 2013/oss M801 as ]]&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80069</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80069"/>
		<updated>2013-10-08T03:34:12Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80066</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80066"/>
		<updated>2013-10-08T03:31:07Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80048</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80048"/>
		<updated>2013-10-08T03:21:15Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80044</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80044"/>
		<updated>2013-10-08T03:20:09Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''=== &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80039</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80039"/>
		<updated>2013-10-08T03:17:18Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80038</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80038"/>
		<updated>2013-10-08T03:17:00Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|frame|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80037</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80037"/>
		<updated>2013-10-08T03:16:25Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|frame|25 px|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80036</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80036"/>
		<updated>2013-10-08T03:15:54Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|frame|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Tdd39.jpg&amp;diff=80033</id>
		<title>File:Tdd39.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Tdd39.jpg&amp;diff=80033"/>
		<updated>2013-10-08T03:14:24Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: uploaded a new version of &amp;amp;quot;File:Tdd39.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80025</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80025"/>
		<updated>2013-10-08T03:09:51Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
=== What is Agile development? === &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Why do we need Agile development?===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===Principles of agile development &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===Some well known agile development methods===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
==Future of Agile in Rails&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.  &lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80022</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80022"/>
		<updated>2013-10-08T03:07:28Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
=== What is Agile development? === &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Why do we need Agile development?===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===Principles of agile development &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===Some well known agile development methods===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
==Future of Agile in Rails&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle.&lt;br /&gt;
&lt;br /&gt;
Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.  &lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80020</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80020"/>
		<updated>2013-10-08T03:06:18Z</updated>

		<summary type="html">&lt;p&gt;Asankar3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
=== What is Agile development? === &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development :Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. It involves continuous planning, continuous testing, continuous integration, and other forms of continuous evolution of both the project and the software. It focuses on empowering people to collaborate and make decisions together quickly and effectively.&lt;br /&gt;
&lt;br /&gt;
Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Why do we need Agile development?===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===Principles of agile development &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===Some well known agile development methods===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
===''Convention over Configuration''===&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
==Future of Agile in Rails&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle.&lt;br /&gt;
&lt;br /&gt;
Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.  &lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asankar3</name></author>
	</entry>
</feed>