<?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=Ksalato</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=Ksalato"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Ksalato"/>
	<updated>2026-09-12T17:26:06Z</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_2009/wiki3_18_301&amp;diff=30064</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=30064"/>
		<updated>2009-11-25T05:24:10Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. According to [2], the instability of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibility''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown to be not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Let’s calculate the instability of the ''Car'' package:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
In general, lower values result in more stable packages. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to be effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
To summarize, the SDP is one of several package design principles. It helps design &amp;quot;systems with a high degree of reusability and testability&amp;quot; [1]. The principle states that &amp;quot;a package should always depend upon packages that are more stable than it is,&amp;quot; and this article demonstrates methods to identify which packages are more stable than others.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=30063</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=30063"/>
		<updated>2009-11-25T05:24:05Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principlex&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. According to [2], the instability of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibility''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown to be not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Let’s calculate the instability of the ''Car'' package:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
In general, lower values result in more stable packages. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to be effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
To summarize, the SDP is one of several package design principles. It helps design &amp;quot;systems with a high degree of reusability and testability&amp;quot; [1]. The principle states that &amp;quot;a package should always depend upon packages that are more stable than it is,&amp;quot; and this article demonstrates methods to identify which packages are more stable than others.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29332</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29332"/>
		<updated>2009-11-19T02:21:01Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Instability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibility''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown to be not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Let’s calculate the instability of the ''Car'' package:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29323</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29323"/>
		<updated>2009-11-19T02:19:34Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Instability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibility''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown to be not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29317</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29317"/>
		<updated>2009-11-19T02:18:14Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Instability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29307</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29307"/>
		<updated>2009-11-19T02:14:21Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. According to [4], &amp;quot;classes often have dependencies on other classes, creating package dependencies relationships.&amp;quot; The below principle can interchangeably be applied to small packages of just one class, and to larger ones consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29301</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29301"/>
		<updated>2009-11-19T02:10:24Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming (OOP), an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Package==&lt;br /&gt;
&lt;br /&gt;
In OOP, a package is one or more classes logically grouped into a single unit. The below principle can interchangeably be applied to small packages of just one class, and to larger packages consisting of multiple classes.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29283</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29283"/>
		<updated>2009-11-19T02:05:37Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Object Oriented Programming, an important part of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29257</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29257"/>
		<updated>2009-11-19T02:01:04Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;br /&gt;
&lt;br /&gt;
[5] Stability, http://www.objectmentor.com/resources/articles/stability.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29251</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29251"/>
		<updated>2009-11-19T01:59:36Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;br /&gt;
&lt;br /&gt;
[3] What Makes A Good Object-Oriented Design?, http://ootips.org/ood-principles.html&lt;br /&gt;
&lt;br /&gt;
[4] Principles of Package Design, http://nandokakimoto.wordpress.com/2009/05/15/principles-of-package-design/&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29236</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29236"/>
		<updated>2009-11-19T01:56:25Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP? Let's look at another example. The following is a more complex diagram outlining several ''Car'' components and their sub-components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29230</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29230"/>
		<updated>2009-11-19T01:55:12Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29226</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29226"/>
		<updated>2009-11-19T01:54:48Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, all of our dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29222</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29222"/>
		<updated>2009-11-19T01:54:11Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, the dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
Another important consideration when it comes to stability is that more stable packages should not be changed often. On the other hand, a highly volatile class can be changed easily, without affecting other packages in the system.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[1] The Tipping Point: Stability and Instability in OO Design, http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
[2] On Package Design, https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig4.png&amp;diff=29056</id>
		<title>File:Fig4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig4.png&amp;diff=29056"/>
		<updated>2009-11-19T00:57:05Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29030</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29030"/>
		<updated>2009-11-19T00:47:07Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
The lower the value, the more stable the package is considered to be. In our case, the dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29026</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29026"/>
		<updated>2009-11-19T00:45:07Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
After replacing each class with its corresponding instability value, the diagram would look as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig4.png]]&lt;br /&gt;
&lt;br /&gt;
In our case, the dependencies progress in the direction of stability, thus, according to the SDP, our design is proven to effective.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29004</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=29004"/>
		<updated>2009-11-19T00:36:04Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / (0 + 3) = 1 (the least stable)&lt;br /&gt;
 I(W) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(E) = 2 / (1 + 2) = 0.66&lt;br /&gt;
 I(Su) = 1 / (1 + 1) = 0.5&lt;br /&gt;
 I(T) = 0 / (1 + 0) = 0 (the most stable)&lt;br /&gt;
 I(R) = 0 / (1 + 0) = 0 &lt;br /&gt;
 I(Cyl) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(O) = 0 / (1 + 0) = 0&lt;br /&gt;
 I(St) = 0 / (1 + 0) = 0&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28976</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28976"/>
		<updated>2009-11-19T00:27:00Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
The instability of each of the modules would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 I(C) = zxc&lt;br /&gt;
 I(W) = zxc&lt;br /&gt;
 I(E) = zxc&lt;br /&gt;
 I(Su) = zxc&lt;br /&gt;
 I(T) = zxc&lt;br /&gt;
 I(R) = zxc&lt;br /&gt;
 I(Cyl) = zxc&lt;br /&gt;
 I(O) = zxc&lt;br /&gt;
 I(St) = zxc&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28949</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28949"/>
		<updated>2009-11-19T00:22:10Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The ''Stable Dependencies Principle'' (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several ''Car'' components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28946</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28946"/>
		<updated>2009-11-19T00:21:31Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Instability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
 I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibilities''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The ''Wheel'' class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
 I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the ''Wheel'' class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the ''Car'' class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – ''Wheel'', ''Engine'', and ''Suspension'' (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
 I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the ''Car'' module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28933</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28933"/>
		<updated>2009-11-19T00:18:27Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Definition of Instability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
First, let's discuss why certain packages are considered stable, and others are not. The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28923</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28923"/>
		<updated>2009-11-19T00:13:33Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of many problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28160</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28160"/>
		<updated>2009-11-18T05:34:33Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a root cause of major problems, thus, it is vital to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of. &lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28158</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28158"/>
		<updated>2009-11-18T05:32:42Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a cause of major problem, thus, it is important to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of. &lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
== Stable Dependencies Principle ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.ddj.com/architect/184415285&lt;br /&gt;
&lt;br /&gt;
https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/udp_package_design_200906.pdf&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28155</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28155"/>
		<updated>2009-11-18T05:30:43Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Package Design is a challenging area of Software Engineering. An inefficiently designed system can be a cause of major problem, thus, it is important to have a solid understanding of various design approaches. This article discusses Stable Dependencies Principle, one of a few key package design principles that software engineers should be aware of. &lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
==Stable Dependencies Principle==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28137</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28137"/>
		<updated>2009-11-18T05:21:36Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
== Definition of Instability ==&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
==Stable Dependencies Principle==&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;br /&gt;
&lt;br /&gt;
The following is a more complex diagram outlining several Car components:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig3.png]]&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28127</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28127"/>
		<updated>2009-11-18T05:17:21Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig1.png]] &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:fig2.png]] &lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Next, let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig3.png&amp;diff=28120</id>
		<title>File:Fig3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig3.png&amp;diff=28120"/>
		<updated>2009-11-18T05:15:30Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig2.png&amp;diff=28119</id>
		<title>File:Fig2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig2.png&amp;diff=28119"/>
		<updated>2009-11-18T05:15:20Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig1.png&amp;diff=28118</id>
		<title>File:Fig1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Fig1.png&amp;diff=28118"/>
		<updated>2009-11-18T05:15:12Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28114</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=28114"/>
		<updated>2009-11-18T05:12:57Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The Stable Dependencies Principle (SDP) states that “a package should always depend upon packages that are more stable than it is.” Ideally, the direction of dependencies should go from high volatile to more stable packages.&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires in order to operate correctly. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
For example, let’s look at the following component diagram:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;image1&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Wheel class in this example is shown as not dependent on any other module. &lt;br /&gt;
&lt;br /&gt;
Using the above formula: &lt;br /&gt;
&lt;br /&gt;
I(W) = 0 / ( 3 + 0 ) = 0&lt;br /&gt;
&lt;br /&gt;
I(W) has the instability of zero. In other words, even though the Wheel class is “responsible” for three classes (Ca=3), it is not dependent upon any of them (Ce = 0), thus resulting in a stable package. &lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have the instability of 1, as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;image2&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In this case, the Car class does not have any dependent classes (Ca = 0), yet itself depends upon three classes – Wheel, Engine, and Suspension (Ce = 3).&lt;br /&gt;
&lt;br /&gt;
Let’s calculate the instability:&lt;br /&gt;
&lt;br /&gt;
I(C) = 3 / ( 0 + 3 ) = 3 / 3 = 1&lt;br /&gt;
&lt;br /&gt;
The instability of 1 indicates a high level of volatility of the Car module.&lt;br /&gt;
&lt;br /&gt;
So how do we know whether a certain component design follows the SDP?&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27933</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27933"/>
		<updated>2009-11-18T03:23:49Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The ''instability'' of any package can be calculated using the following formula:&lt;br /&gt;
&lt;br /&gt;
'''I (instability) = Ce / ( Ca + Ce )'''&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires to operate. In other words, this is an indicator of package ''independence''.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package ''responsibility''.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely ''independent'' and also ''stable'', it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
Using the formula: '''I = 0 / ( Ca + 0 ) = 0''', has the instability of zero.&lt;br /&gt;
&lt;br /&gt;
Respectively, ''instable'' or ''irresponsible'' packages would have instability of 1 as shown below:&lt;br /&gt;
&lt;br /&gt;
'''I = Ce / ( 0 + Ce ) = Ce / Ce = 1'''&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27878</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27878"/>
		<updated>2009-11-18T02:36:24Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The instability of any package can be calculated using the following formula.&lt;br /&gt;
&lt;br /&gt;
I (instability) = Ce / ( Ca + Ce )&lt;br /&gt;
&lt;br /&gt;
In this formula:&lt;br /&gt;
&lt;br /&gt;
Ce – the number of other modules that our package requires to operate. In other words, this is an indicator of package independence.&lt;br /&gt;
&lt;br /&gt;
Ca – the number of packages that can be viewed as “dependents“, i.e., “depend upon classes within the package”. This is an indicator of package responsibilities.&lt;br /&gt;
&lt;br /&gt;
Therefore, in order for a package to be completely independent and also stable, it should not be dependent upon other packages.&lt;br /&gt;
&lt;br /&gt;
Using the formula: I = 0 / ( Ca + 0 ) = 0, has the instability of zero.&lt;br /&gt;
&lt;br /&gt;
Respectively, instable or irresponsible packages would have instability of 1 as shown below:&lt;br /&gt;
&lt;br /&gt;
I = Ce / ( 0 + Ce ) = Ce / Ce = 1&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27195</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 18 301</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_18_301&amp;diff=27195"/>
		<updated>2009-11-17T02:32:33Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Topic: Stable Dependencies Principle&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19307</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19307"/>
		<updated>2009-09-16T17:45:23Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; [9] It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though this review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plug-in. RubyMine and NetBeans are also excellent IDE choices and should not be underestimated. Finally, all three products can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19306</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19306"/>
		<updated>2009-09-16T17:43:37Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; [9] It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though this review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19304</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19304"/>
		<updated>2009-09-16T17:42:49Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Aptana (Eclipse Plug-in) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; [9] It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though this review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices for Ruby development, and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19303</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19303"/>
		<updated>2009-09-16T17:42:05Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages. &lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though this review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices for Ruby development, and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19302</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19302"/>
		<updated>2009-09-16T17:41:25Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages. &lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though our review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices for Ruby development, and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19301</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19301"/>
		<updated>2009-09-16T17:40:58Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages. &lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though our review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices for Ruby development, and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19300</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19300"/>
		<updated>2009-09-16T17:40:43Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, and is a &amp;quot;Winner of the 2006 EclipseCon community award for Best Open-Source Eclipse-based tool.&amp;quot; It is especially effective if, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages. &lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Even though our review did not reveal a clear winner, one may want to begin exploring Ruby with an award-winning Aptana RadRails plugin. Both RubyMine and NetBeans are also excellent IDE choices for Ruby development, and should not be underestimated. All three can be easily be installed side-by-side for a thorough comparison.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;br /&gt;
&lt;br /&gt;
[9] http://aptana.com/docs/index.php/RadRails&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19289</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19289"/>
		<updated>2009-09-16T17:15:07Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=160|Product&lt;br /&gt;
!width=140|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=60|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:90%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19288</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19288"/>
		<updated>2009-09-16T17:13:56Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:91%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:91%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center; font-size:91%;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19287</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19287"/>
		<updated>2009-09-16T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=130|Platform&lt;br /&gt;
!width=80|Debugger&lt;br /&gt;
!width=80|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19286</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19286"/>
		<updated>2009-09-16T17:07:25Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=100|Platform&lt;br /&gt;
!width=100|Debugger&lt;br /&gt;
!width=100|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || [http://en.wikipedia.org/wiki/Windows Windows], [http://en.wikipedia.org/wiki/Linux Linux], [http://en.wikipedia.org/wiki/Mac_OS_X Mac OS X] || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19285</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19285"/>
		<updated>2009-09-16T17:04:54Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=100|Platform&lt;br /&gt;
!width=100|Debugger&lt;br /&gt;
!width=100|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || Yes || CVS, SVN, Mercurial, Clearcase&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || Windows, Linux, Mac OS X || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19284</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19284"/>
		<updated>2009-09-16T16:58:33Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=100|Platform&lt;br /&gt;
!width=100|Debugger&lt;br /&gt;
!width=100|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|[http://en.wikipedia.org/wiki/Aptana#RadRails Aptana Plug-in for Eclipse]|| [http://en.wikipedia.org/wiki/Aptana Aptana, Inc.] || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || xxx || xxx&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/NetBeans#NetBeans_IDE_Bundle_for_Ruby NetBeans for Ruby]|| [http://en.wikipedia.org/wiki/Sun_microsystems Sun Microsystems] || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || Yes || xxx || xxx&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[http://en.wikipedia.org/wiki/RubyMine RubyMine]|| [http://en.wikipedia.org/wiki/JetBrains JetBrains] || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || Windows, Linux, Mac OS X || Yes || Yes || SVS, Git, Perforce, CVS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19282</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19282"/>
		<updated>2009-09-16T16:42:27Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=130|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=100|Platform&lt;br /&gt;
!width=100|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|Aptana Plug-in for Eclipse|| Aptana, Inc. || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || 1.5 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || xxx || xxx&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|NetBeans for Ruby|| Sun Microsystems || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] || xxx || xxx&lt;br /&gt;
|-style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|RubyMine|| JetBrains || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || xxx || xxx || xxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19280</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_22&amp;diff=19280"/>
		<updated>2009-09-16T16:37:11Z</updated>

		<summary type="html">&lt;p&gt;Ksalato: /* Side-by-Side Comparison */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Today's programming languages are becoming more and more complex. In most cases, a developer relies on an [http://en.wikipedia.org/wiki/Integrated_development_environment Integrated Development Environment (IDE)] which can assist with tasks such as editing, debugging, version control, etc. Programming in [http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby language] is no exception. Below is an overview of three popular IDE choices for Ruby.&lt;br /&gt;
&lt;br /&gt;
== What is Ruby? ==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 Ruby] is a general purpose programming language, invented by a Japanese programmer [http://en.wikipedia.org/wiki/Yukihiro_Matsumoto Yukihiro &amp;quot;Matz&amp;quot; Matsumoto]. The majority of design work was done back in 1990s, however, the language popularity took off ten years later, in 2006, with Ruby gaining worldwide acceptance.&lt;br /&gt;
&lt;br /&gt;
The official Ruby's website, http://www.ruby-lang.org, describes Ruby as &amp;quot;a dynamic, open source programming language with a focus on simplicity and productivity,&amp;quot; adding that &amp;quot;it has an elegant syntax that is natural to read and easy to write.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview of Ruby IDEs ==&lt;br /&gt;
&lt;br /&gt;
There are three popular choices when it comes to Ruby IDEs: Aptana plug-in for Eclipse,  &lt;br /&gt;
NetBeans for Ruby, and RubyMine. While all three bundles provide basic IDE functionality and offer seamless integration with Ruby's interpreter, there are many notable differences in their architectures, core features, and other aspects, as briefly summarized below.&lt;br /&gt;
&lt;br /&gt;
== Aptana (Eclipse Plug-in) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse.png|250px|thumb|Aptana 1.5 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Aptana, Inc.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.5&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' GPL (free), Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.aptana.com/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike its competitors, Aptana is not a true IDE package, but is merely a plug-in for a very popular Eclipse platform. Installing Aptana is not as effortless as setting up the other two IDEs, simply because it must follow a successful Eclipse install. Once Eclipse is up and running, the plug-in can then be added.&lt;br /&gt;
&lt;br /&gt;
Being an extremely lightweight platform, Eclipse has no official hardware requirements list. It is known to run on almost any hardware configuration while supporting dozens of OS platforms, from Windows to Linux to Mac OS. Consequently, a minimal hardware setup that is required to run Aptana is also very forgiving: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium Intel Pentium IV or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to take advantage of Aptana's features, one would need to switch Eclipse to a &amp;quot;Ruby perspective&amp;quot;, therefore, letting Aptana to take control over the IDE. Among the features offered by the Aptana Studio package, its developers list the following:&lt;br /&gt;
&lt;br /&gt;
*Full support of &amp;quot;Ruby on Rails and loads of popular gems&amp;quot;&lt;br /&gt;
*Instant Code Assist&lt;br /&gt;
*Syntax Highlighting&lt;br /&gt;
*Various Views&lt;br /&gt;
*And many other features...&lt;br /&gt;
&lt;br /&gt;
Aptana Studio is an excellent IDE choice, given that, in addition to using it for Ruby development, you plan on using Eclipse with other programming languages.&lt;br /&gt;
&lt;br /&gt;
== NetBeans ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:NetBeans.png|250px|thumb|NetBeans 6.7 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' Sun Microsystems&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 6.7&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' CDDL (free)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Cross-platform&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.netbeans.org/features/ruby/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans for Ruby is a free, cross-platform IDE based on customizable and easily expandable NetBeans framework by Sun Microsystems. This platform is known primarily for being a foundation of a very popular Java IDE bundle. Unlike Eclipse, which supports Ruby through plugins such as Aptana, Sun Micosystems decided to release a standalone Ruby-focused toolset.&lt;br /&gt;
&lt;br /&gt;
The latest version of this IDE can be found at http://www.netbeans.org/downloads/index.html. The installation is very straightforward, given that your hardware meets the following modest hardware specifications:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800MHz or equivalent (Intel Pentium IV 2.6 GHz recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 512 MB (2 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Disk space:''' 750 MB of free disk space (1 GB recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to NetBeans.org, the following major components are included in the NetBeans for Ruby bundle:&lt;br /&gt;
&lt;br /&gt;
*Ruby Source Code Editor&lt;br /&gt;
*Ruby and Rails Debugger&lt;br /&gt;
*Support for Ruby projects&lt;br /&gt;
*Ruby Gems Installation Manager&lt;br /&gt;
&lt;br /&gt;
This option is a great choice when one plans on sticking with Ruby projects. One downside of this environment is that it may feel a little sluggish on slow computers due to its high hardware requirements. However, it should work just fine on the majority of modern PCs.&lt;br /&gt;
&lt;br /&gt;
== RubyMine ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RubyMine.png|250px|thumb|RubyMine 1.1.1 in Microsoft Windows XP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developed by:''' JetBrains&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Version:''' 1.1.1&amp;lt;br&amp;gt;&lt;br /&gt;
'''License:''' Proprietary&amp;lt;br&amp;gt;&lt;br /&gt;
'''Operating System:''' Windows, Mac OS X, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
'''Website:''' http://www.jetbrains.com/ruby&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RubyMine is a proprietary Ruby IDE that is being developed by JetBrains. It is advertised as &amp;quot;The Most Intelligent Ruby IDE&amp;quot; due to a variety of offered features, focused solely on Ruby. Here are a few of its key components: &lt;br /&gt;
&lt;br /&gt;
*Intelligent Editor, supporting code completion, automatic refactoring, and other techniques.&lt;br /&gt;
*Error-Free Coding, essentially an automatic code analysis performed during the code design phase.&lt;br /&gt;
*Advanced debugging tool&lt;br /&gt;
*Full Ruby on Rails support&lt;br /&gt;
*And more...&lt;br /&gt;
&lt;br /&gt;
In order to have a trouble free experience, your computer should meet minimal recommended specs outlined below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Processor:''' Intel Pentium III 800 MHz or equivalent&amp;lt;br&amp;gt;&lt;br /&gt;
'''Memory:''' 256 MB (1 GB RAM recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similarly to NetBeans, RubyMine is a good pick as a primary Ruby IDE. Just like the other IDEs, it is written in Java, so one would need to keep in mind that a speedy PC is a must, to be able to run JVM comfortably. Another downside is that it is offered under a proprietary license, costing $99 per license.&lt;br /&gt;
&lt;br /&gt;
== Side-by-Side Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=180|Product&lt;br /&gt;
!width=150|Developed By&lt;br /&gt;
!width=150|License&lt;br /&gt;
!width=70|Cost&lt;br /&gt;
!width=100|Current Version&lt;br /&gt;
!width=100|Platform&lt;br /&gt;
!width=100|Refactoring&lt;br /&gt;
!width=100|Version Control&lt;br /&gt;
|-&lt;br /&gt;
|Aptana Plug-in for Eclipse|| Aptana, Inc. || [http://en.wikipedia.org/wiki/GPL GPL], [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || Free || xxx || xxx || xxx || xxx&lt;br /&gt;
|-&lt;br /&gt;
|NetBeans for Ruby|| Sun Microsystems || [http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License CDDL] || Free|| 6.7.1 || xxx || xxx || xxx&lt;br /&gt;
|-&lt;br /&gt;
|RubyMine|| JetBrains || [http://en.wikipedia.org/wiki/Proprietary_software Proprietary] || $99 || 1.1.1 || xxx || xxx || xxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[1] http://aptana.com/&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Aptana&lt;br /&gt;
&lt;br /&gt;
[3] http://www.jetbrains.com/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[4] http://www.netbeans.org/features/ruby/index.html&lt;br /&gt;
&lt;br /&gt;
[5] http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-lang.org/en/&lt;br /&gt;
&lt;br /&gt;
[7] http://www.aptana.com/studio#content_ajax&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Ruby&lt;/div&gt;</summary>
		<author><name>Ksalato</name></author>
	</entry>
</feed>