<?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=Araj</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=Araj"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Araj"/>
	<updated>2026-07-21T19:41:35Z</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/wiki2_2_AJAXandMVC&amp;diff=25592</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25592"/>
		<updated>2009-10-10T04:13:30Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* AJAX IN .NET Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/AJAX AJAX] stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
Improves the user experience in,&lt;br /&gt;
&lt;br /&gt;
# Analyzing information typed into browser in real time&lt;br /&gt;
# Provide a richer experience&lt;br /&gt;
# Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
&lt;br /&gt;
# Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
HTTP requests are sent by [http://en.wikipedia.org/wiki/JavaScript JavaScript] calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a web page, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Technologies used in AJAX.&lt;br /&gt;
# JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
# DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
# CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
# HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[http://en.wikipedia.org/wiki/Ajax_%28programming%29]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&amp;gt;&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
One cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25591</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25591"/>
		<updated>2009-10-10T04:12:42Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/AJAX AJAX] stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
Improves the user experience in,&lt;br /&gt;
&lt;br /&gt;
# Analyzing information typed into browser in real time&lt;br /&gt;
# Provide a richer experience&lt;br /&gt;
# Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
&lt;br /&gt;
# Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
HTTP requests are sent by [http://en.wikipedia.org/wiki/JavaScript JavaScript] calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a web page, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Technologies used in AJAX.&lt;br /&gt;
# JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
# DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
# CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
# HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[http://en.wikipedia.org/wiki/Ajax_%28programming%29]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&amp;gt;&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25590</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25590"/>
		<updated>2009-10-10T04:11:42Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/AJAX AJAX] stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
Improves the user experience in,&lt;br /&gt;
&lt;br /&gt;
# Analyzing information typed into browser in real time&lt;br /&gt;
# Provide a richer experience&lt;br /&gt;
# Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
&lt;br /&gt;
# Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
HTTP requests are sent by [http://en.wikipedia.org/wiki/JavaScript JavaScript] calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a web page, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Technologies used in AJAX.&lt;br /&gt;
# JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
# DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
# CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
# HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[http://en.wikipedia.org/wiki/Ajax_%28programming%29]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25585</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25585"/>
		<updated>2009-10-10T04:06:14Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
Improves the user experience in,&lt;br /&gt;
&lt;br /&gt;
# Analyzing information typed into browser in real time&lt;br /&gt;
# Provide a richer experience&lt;br /&gt;
# Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
&lt;br /&gt;
# Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Technologies used in AJAX.&lt;br /&gt;
# JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
# DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
# CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
# HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an XMLHttpRequest and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[http://en.wikipedia.org/wiki/Ajax_%28programming%29]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== AJAX IN JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25582</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25582"/>
		<updated>2009-10-10T04:04:18Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
Improves the user experience in,&lt;br /&gt;
&lt;br /&gt;
# Analyzing information typed into browser in real time&lt;br /&gt;
# Provide a richer experience&lt;br /&gt;
# Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
&lt;br /&gt;
# Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Technologies used in AJAX.&lt;br /&gt;
# JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
# DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
# CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
# HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an XMLHttpRequest and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[http://en.wikipedia.org/wiki/Ajax_%28programming%29]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25581</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25581"/>
		<updated>2009-10-10T04:00:31Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantage:&lt;br /&gt;
Improves the user experience&lt;br /&gt;
 # Analyzing information typed into browser in real time&lt;br /&gt;
 # Provide a richer experience&lt;br /&gt;
 # Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
 # Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Technologies used in AJAX.&lt;br /&gt;
   # JavaScript - JavaScript is a loosely typed object based scripting language supported by all major browsers and essential for   AJAX interactions. JavaScript functions in a page are invoked as event handlers when an event in a page occurs such as a page load, a mouse click, or a key press in a form element.&lt;br /&gt;
   # DOM - is API for accessing and manipulating structured documents. In most cases DOM represent the structure of XML or HTML documents.&lt;br /&gt;
   # CSS - Allows you to define the presentation of a page such as fonts, colors, sizes, and positioning. CSS allow for a clear separation of the style from the content and may be changed pragmatically by JavaScript.&lt;br /&gt;
   # HTTP - Understanding the basic request/response interaction model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an XMLHttpRequest and HTTP response codes when processing callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[[Media:wikipedia:http://en.wikipedia.org/wiki/Ajax_%28programming%29]]&lt;br /&gt;
# AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
# Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
# Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
# Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
# Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
# The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
# AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
# User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
# Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required on the business model in model. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. It can be consider that any behavioral JavaScript as part of the Controller, including attaching events as well as sending HTTP requests.&lt;br /&gt;
AJAX tag libraries [http://ajaxtags.sourceforge.net/] can be to fit ajax into any framework.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[http://ajax-mvc.sourceforge.net/] used for much smoother integration of ajax into mvc framework.&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ajax-mvc-php.PNG ]]&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;br /&gt;
&lt;br /&gt;
* http://www.phpied.com/ajax-mvc/&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25556</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25556"/>
		<updated>2009-10-10T03:36:06Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* JAVA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantage:&lt;br /&gt;
Improves the user experience&lt;br /&gt;
 - Analyzing information typed into browser in real time&lt;br /&gt;
 - Provide a richer experience&lt;br /&gt;
 - Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
 - Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Technologies used in AJAX.&lt;br /&gt;
   *  JavaScript - JavaScript is a loosely typed object based scripting &lt;br /&gt;
language supported by all major browsers and essential for AJAX &lt;br /&gt;
interactions. JavaScript functions in a page are invoked as event &lt;br /&gt;
handlers when an event in a page occurs such as a page load, a &lt;br /&gt;
mouse click, or a key press in a form element.&lt;br /&gt;
    * DOM - is API for accessing and manipulating structured &lt;br /&gt;
documents. In most cases DOM represent the structure of XML or &lt;br /&gt;
HTML documents.&lt;br /&gt;
    * CSS - Allows you to define the presentation of a page such as &lt;br /&gt;
fonts, colors, sizes, and positioning. CSS allow for a clear separation &lt;br /&gt;
of the style from the content and may be changed programatically by &lt;br /&gt;
JavaScript.&lt;br /&gt;
    * HTTP - Understanding the basic request/response interaction &lt;br /&gt;
model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an &lt;br /&gt;
XMLHttpRequest and HTTP response codes when processing &lt;br /&gt;
callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[[Media:wikipedia:http://en.wikipedia.org/wiki/Ajax_%28programming%29]]&lt;br /&gt;
1. AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
2. Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
5. Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
6. The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
7. AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
8. AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
9. User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
10. Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required for the Ajax functionality. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[[Media:http://ajax-mvc.sourceforge.net/]] used for much smoother integration of ajax into mvc framework. &lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# A client event occurs.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs] &lt;br /&gt;
# An XMLHttpRequest object is created and configured. [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest] &lt;br /&gt;
# The XMLHttpRequest object makes a call.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call] &lt;br /&gt;
# The request is processed by the ValidateServlet.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing] &lt;br /&gt;
# The ValidateServlet returns an XML document containing the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned] &lt;br /&gt;
# The XMLHttpRequest object calls the callback() function and processes the result.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process] &lt;br /&gt;
# The HTML DOM is updated.[http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom]&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25546</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25546"/>
		<updated>2009-10-10T03:30:30Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantage:&lt;br /&gt;
Improves the user experience&lt;br /&gt;
 - Analyzing information typed into browser in real time&lt;br /&gt;
 - Provide a richer experience&lt;br /&gt;
 - Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
 - Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Technologies used in AJAX.&lt;br /&gt;
   *  JavaScript - JavaScript is a loosely typed object based scripting &lt;br /&gt;
language supported by all major browsers and essential for AJAX &lt;br /&gt;
interactions. JavaScript functions in a page are invoked as event &lt;br /&gt;
handlers when an event in a page occurs such as a page load, a &lt;br /&gt;
mouse click, or a key press in a form element.&lt;br /&gt;
    * DOM - is API for accessing and manipulating structured &lt;br /&gt;
documents. In most cases DOM represent the structure of XML or &lt;br /&gt;
HTML documents.&lt;br /&gt;
    * CSS - Allows you to define the presentation of a page such as &lt;br /&gt;
fonts, colors, sizes, and positioning. CSS allow for a clear separation &lt;br /&gt;
of the style from the content and may be changed programatically by &lt;br /&gt;
JavaScript.&lt;br /&gt;
    * HTTP - Understanding the basic request/response interaction &lt;br /&gt;
model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an &lt;br /&gt;
XMLHttpRequest and HTTP response codes when processing &lt;br /&gt;
callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[[Media:wikipedia:http://en.wikipedia.org/wiki/Ajax_%28programming%29]]&lt;br /&gt;
1. AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
2. Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
5. Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
6. The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
7. AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
8. AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
9. User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
10. Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required for the Ajax functionality. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[[Media:http://ajax-mvc.sourceforge.net/]] used for much smoother integration of ajax into mvc framework. &lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25542</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25542"/>
		<updated>2009-10-10T03:30:06Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* What is AJAX ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== What is AJAX ? ===&lt;br /&gt;
AJAX stands for Asynchronous JavaScript and XML.It is a Web development technique for creating web applications. It Makes web pages more responsive by exchanging small amounts of data. It allows the web page to change its content without refreshing the whole page. A web browser technology is independent of web server software. It gives desktop application a feel good factor,by doing behind the scene server communication. A famous example: [http://www.google.com/support/websearch/bin/answer.py?hl=en&amp;amp;answer=106230 Google's suggest] uses Ajax, and also it also helped in making it popular.&lt;br /&gt;
&lt;br /&gt;
Advantage:&lt;br /&gt;
Improves the user experience&lt;br /&gt;
 - Analyzing information typed into browser in real time&lt;br /&gt;
 - Provide a richer experience&lt;br /&gt;
 - Increases responsiveness of web pages&lt;br /&gt;
&lt;br /&gt;
Improve bandwidth utilization&lt;br /&gt;
 - Only data which is required is retrieved from the server&lt;br /&gt;
&lt;br /&gt;
How does the magic work??&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
AJAX runs in your browser. &lt;br /&gt;
Works with asynchronous data transfers(HTTP requests)  between the browser and the web server.&lt;br /&gt;
Http requests are sent by javascript calls without having to  submit a form.&lt;br /&gt;
XML is commonly used as the format for receiving server data but plain text and some other format may be used as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. &lt;br /&gt;
&amp;lt;br&amp;gt;The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something. &amp;lt;br&amp;gt;&lt;br /&gt;
Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Technologies used in AJAX.&lt;br /&gt;
   *  JavaScript - JavaScript is a loosely typed object based scripting &lt;br /&gt;
language supported by all major browsers and essential for AJAX &lt;br /&gt;
interactions. JavaScript functions in a page are invoked as event &lt;br /&gt;
handlers when an event in a page occurs such as a page load, a &lt;br /&gt;
mouse click, or a key press in a form element.&lt;br /&gt;
    * DOM - is API for accessing and manipulating structured &lt;br /&gt;
documents. In most cases DOM represent the structure of XML or &lt;br /&gt;
HTML documents.&lt;br /&gt;
    * CSS - Allows you to define the presentation of a page such as &lt;br /&gt;
fonts, colors, sizes, and positioning. CSS allow for a clear separation &lt;br /&gt;
of the style from the content and may be changed programatically by &lt;br /&gt;
JavaScript.&lt;br /&gt;
    * HTTP - Understanding the basic request/response interaction &lt;br /&gt;
model of HTTP is important for a developer using AJAX. You will be &lt;br /&gt;
exposed to the GET and PUT method when configuring an &lt;br /&gt;
XMLHttpRequest and HTTP response codes when processing &lt;br /&gt;
callback.&lt;br /&gt;
&lt;br /&gt;
Some of the drawbacks:[[Media:wikipedia:http://en.wikipedia.org/wiki/Ajax_%28programming%29]]&lt;br /&gt;
1. AJAX interfaces are substantially harder to develop properly than static pages. &amp;lt;br&amp;gt;&lt;br /&gt;
2. Pages dynamically created using successive AJAX requests do not automatically register themselves with the browser's history engine, so clicking the browser's &amp;quot;back&amp;quot; button may not return the user to an earlier state of the AJAX-enabled page, but may instead return them to the last full page visited before it. Workarounds include the use of invisible IFrames to trigger changes in the browser's history and changing the anchor portion of the URL (following a #) when AJAX is run and monitoring it for changes.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Dynamic web page updates also make it difficult for a user to bookmark a particular state of the application. Solutions to this problem exist, many of which use the URL fragment identifier (the portion of a URL after the '#') to keep track of, and allow users to return to, the application in a given state.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Because most web crawlers do not execute JavaScript code, publicly indexable web applications should provide an alternative means of accessing the content that would normally be retrieved with AJAX, to allow search engines to index it. &amp;lt;br&amp;gt;&lt;br /&gt;
5. Any user whose browser does not support JavaScript or XMLHttpRequest, or simply has this functionality disabled, will not be able to properly use pages which depend on AJAX. Similarly, devices such as mobile phones, PDAs, and screen readers may not have support for the required technologies. Screen readers that are able to use AJAX may still not be able to properly read the dynamically generated content. The only way to let the user carry out functionality is to fall back to non-JavaScript methods. This can be achieved by making sure links and forms can be resolved properly and do not rely solely on AJAX. In JavaScript, form submission could then be halted with &amp;quot;return false&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
6. The same origin policy prevents some AJAX techniques from being used across domains, although the W3C has a draft of the XMLHttpRequest object that would enable this functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
7. AJAX opens up another attack vector for malicious code that web developers might not fully test for.&amp;lt;br&amp;gt;&lt;br /&gt;
8. AJAX-powered interfaces may dramatically increase the number of user-generated requests to web servers and their back-ends (databases, or other). This can lead to longer response times and/or additional hardware needs. &amp;lt;br&amp;gt;&lt;br /&gt;
9. User interfaces can be confusing or behave inconsistently when normal web patterns are not followed. &amp;lt;br&lt;br /&gt;
10. Due to multiple dependent asynchronous requests, you can’t rely on any order of operations in classical AJAX models.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How does AJAX fit with MVC ? ===&lt;br /&gt;
Ajax functionality needs to be implemented first in the view in terms of the call made and then in controller for handling the call . The view should have the call to the  Ajax action which is implemented in controller.&lt;br /&gt;
MVC Controller needs to have a ajax-action  class to take whatever action is required for the Ajax functionality. Action methods can do things like render different views, render a portion of the user interface defined within a partial view as opposed to the full page. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, there has been AJAX MVC[[Media:http://ajax-mvc.sourceforge.net/]] used for much smoother integration of ajax into mvc framework. &lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25469</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25469"/>
		<updated>2009-10-10T02:50:58Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''There are several MVC frameworks that can take advantage of the client-side processing facilities of AJAX. Our aim in writing this wiki page is to consider what parts of the MVC framework (views, controllers?) can migrate part of their functionality to AJAX. In analyzing this problem, we would be considering some server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25456</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25456"/>
		<updated>2009-10-10T02:46:00Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* .NET Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Several MVC frameworks can take advantage of the client-side processing facilities of AJAX. Consider what parts of the MVC framework views, controllers?) can migrate part of their functionality to AJAX. Consider server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
# “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
# Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
# Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25447</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25447"/>
		<updated>2009-10-10T02:43:32Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Several MVC frameworks can take advantage of the client-side processing facilities of AJAX. Consider what parts of the MVC framework views, controllers?) can migrate part of their functionality to AJAX. Consider server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25445</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25445"/>
		<updated>2009-10-10T02:42:17Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AJAX AND MVC'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Several MVC frameworks can take advantage of the client-side processing facilities of AJAX. Consider what parts of the MVC framework views, controllers?) can migrate part of their functionality to AJAX. Consider server-side languages such as Java, PHP, and Ruby, as well as the .NET framework.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25437</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25437"/>
		<updated>2009-10-10T02:40:07Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25428</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25428"/>
		<updated>2009-10-10T02:37:42Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
=== RAILS ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&lt;br /&gt;
&lt;br /&gt;
* http://stannard.net.au/blog/media/simple-mvc-framework/mvc.gif&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/Ajax_%28programming%29&lt;br /&gt;
&lt;br /&gt;
* http://www.ajaxf1.com/tutorial/ajax-php.html?page=2&lt;br /&gt;
&lt;br /&gt;
* http://www.asp.net/ajax/&lt;br /&gt;
&lt;br /&gt;
* http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25419</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25419"/>
		<updated>2009-10-10T02:33:45Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller '''Model–View–Controller (MVC)'''] is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each.MVC is often seen in web applications where the view is the [http://en.wikipedia.org/wiki/Html HTML] or [http://en.wikipedia.org/wiki/Xhtml XHTML] generated by the app. The controller receives [http://en.wikipedia.org/wiki/HTTP#Request_methods GET] or [http://en.wikipedia.org/wiki/HTTP#Request_methods POST] input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
==== RAILS ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Ruby_on_Rails Rails] provide support for AJAX in the form of helper methods. There is no need to add [http://en.wikipedia.org/wiki/JavaScript JavaScript] code in the view templates. Instead, the helper methods create the JavaScript code in the HTML page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the [http://en.wikipedia.org/wiki/Prototype_JavaScript_Framework Prototype JavaScript library]. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an [http://en.wikipedia.org/wiki/XMLHttpRequest XMLHttpRequest] is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side JavaScript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP PHP] supports [http://en.wikipedia.org/wiki/JSON JSON] encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== .NET Framework ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/ASP.NET ASP.NET] AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the [http://en.wikipedia.org/wiki/JQuery jQuery] library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
==== JAVA ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Java Java] technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, [http://en.wikipedia.org/wiki/JavaServer_Pages JavaServer Pages (JSP)]  technology, [http://en.wikipedia.org/wiki/JavaServer_Faces JavaServer Faces (JSF)] technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Rich_Internet_application Rich Internet applications (RIA)] are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25380</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25380"/>
		<updated>2009-10-10T02:11:19Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
'''Model–View–Controller (MVC)''' (MVC) is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each. &lt;br /&gt;
MVC is often seen in web applications where the view is the HTML or XHTML generated by the app. The controller receives GET or POST input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.Read more about MVC from [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
==== RAILS ====&lt;br /&gt;
&lt;br /&gt;
Rails provide support for AJAX in the form of helper methods. There is no need to add Javascript code in the view templates. Instead, the helper methods create the Javascript code in the html page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the Prototype JavaScript library. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an XMLHttpRequest is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side Javascript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
PHP supports JSON encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
ASP.NET AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the jQuery library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both. &lt;br /&gt;
ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== JAVA ===&lt;br /&gt;
&lt;br /&gt;
Java technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, JavaServer Pages (JSP) technology, JavaServer Faces (JSF) technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
Rich Internet applications(RIA) are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25371</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25371"/>
		<updated>2009-10-10T02:08:57Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
'''Model–View–Controller (MVC)''' (MVC) is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each. &lt;br /&gt;
MVC is often seen in web applications where the view is the HTML or XHTML generated by the app. The controller receives GET or POST input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.Read more about MVC from [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxandmvc.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ajax_fig1.png|left]] [[Image:ajax_fig2.png|none]]&lt;br /&gt;
&lt;br /&gt;
==== 1. RAILS ====&lt;br /&gt;
&lt;br /&gt;
Rails provide support for AJAX in the form of helper methods. There is no need to add Javascript code in the view templates. Instead, the helper methods create the Javascript code in the html page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the Prototype JavaScript library. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an XMLHttpRequest is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side Javascript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 2. PHP ====&lt;br /&gt;
&lt;br /&gt;
PHP supports JSON encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. .NET Framework ===&lt;br /&gt;
&lt;br /&gt;
ASP.NET AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the jQuery library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both. &lt;br /&gt;
ASP.NET AJAX server-side controls such as the ScriptManager, UpdatePanel, and the UpdateProgress control to add AJAX functionality to an ASP.NET application without writing any JavaScript. For example, the UpdatePanel control enables you to update a portion of an ASP.NET page without requiring you to reload the entire page. The ScriptManager control enables you to manage browser history in an AJAX application by updating the browser back button after an AJAX request. &lt;br /&gt;
&lt;br /&gt;
If you prefer to work directly with JavaScript then you can take advantage of client-side ASP.NET AJAX. The client-side ASP.NET AJAX Library provides a foundation for building rich client-side applications. The library simplifies cross-browser development of client-side applications. For example, the library enables you to call web services and create components and controls -- all through pure client-side JavaScript code. &lt;br /&gt;
&lt;br /&gt;
one cool thing:	AJAX Extensions for .NET&lt;br /&gt;
No need to modify server-side code&lt;br /&gt;
No javascript functions need to be  added&lt;br /&gt;
AJAX can be enabled/disabled by  changing one line of code (“Script  Manager”)&lt;br /&gt;
 Its as simple as 1 2 3 :)&lt;br /&gt;
1.  “Drag and Drop” Script Manager  Control onto your form&lt;br /&gt;
2.  Place “Update Panels” around  content you wish to have async  updates for&lt;br /&gt;
3.  Add triggers to the update panels  to tell them which events to update  on.&lt;br /&gt;
&lt;br /&gt;
=== 4. JAVA ===&lt;br /&gt;
&lt;br /&gt;
Java technology and AJAX work well together. Java technology provides the server-side processing for AJAX interactions. It can provide this through servlets, JavaServer Pages (JSP) technology, JavaServer Faces (JSF) technology, and web services. The programming model for handling AJAX requests uses the same APIs that you would use for conventional web applications. JSF technology can be used to create reusable components that generate the client-side JavaScript and corresponding server-side AJAX processing code. &lt;br /&gt;
&lt;br /&gt;
Consider a simple example [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html] where AJAX and java servlets interact.HTML page generated in JSP technology contains an HTML form that requires server-side logic to validate form data without refreshing the page. A server-side web component (servlet) named ValidateServlet will provide the validation logic. &lt;br /&gt;
&lt;br /&gt;
[[Image:railsinjava_fig1.png]]&lt;br /&gt;
&lt;br /&gt;
Ajax interaction as they appear in Figure:&lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#event_occurs A client event occurs.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#configure_xmlhttprequest An XMLHttpRequest object is created and configured.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#make_call The XMLHttpRequest object makes a call.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#serverside_processing The request is processed by the ValidateServlet.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#xml_returned The ValidateServlet returns an XML document containing the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#post_process The XMLHttpRequest object calls the callback() function and processes the result.] &lt;br /&gt;
# [http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html#update_dom The HTML DOM is updated.] &lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
Rich Internet applications(RIA) are web application that approximate the look and feel and usability of desktop application. It adds performance and rich GUI. AJAX enables RIA, which uses client-side scripting to make web applications more responsive. Ajax application separates client-side user interaction and server communication, and run them in parallel, reducing the delays of server-side processing normally experienced by user.&lt;br /&gt;
&lt;br /&gt;
MVC frameworks in various languages like PHP, Rails, .NET etc provides well defined support to implement AJAX functionality. This article provided a brief overview of this support in Java, .NET, Rails and PHP.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajax_fig2.png&amp;diff=25351</id>
		<title>File:Ajax fig2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajax_fig2.png&amp;diff=25351"/>
		<updated>2009-10-10T02:00:07Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajax_fig1.png&amp;diff=25346</id>
		<title>File:Ajax fig1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajax_fig1.png&amp;diff=25346"/>
		<updated>2009-10-10T01:57:47Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxandmvc.gif&amp;diff=25329</id>
		<title>File:Ajaxandmvc.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxandmvc.gif&amp;diff=25329"/>
		<updated>2009-10-10T01:50:38Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Railsinjava_fig1.png&amp;diff=25299</id>
		<title>File:Railsinjava fig1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Railsinjava_fig1.png&amp;diff=25299"/>
		<updated>2009-10-10T01:34:49Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25201</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 2 AJAXandMVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_2_AJAXandMVC&amp;diff=25201"/>
		<updated>2009-10-10T00:58:38Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction== &lt;br /&gt;
&lt;br /&gt;
=== What is MVC ? ===&lt;br /&gt;
&lt;br /&gt;
'''Model–View–Controller (MVC)''' (MVC) is an architectural pattern used in software engineering. The pattern isolates business logic from input and presentation, permitting independent development, testing and maintenance of each. &lt;br /&gt;
MVC is often seen in web applications where the view is the HTML or XHTML generated by the app. The controller receives GET or POST input and decides what to do with it, handing over to domain objects (ie the model) which contain the business rules and know how to carry out specific tasks such as processing a new subscription.MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.Read more about MVC from [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller wikipedia]&lt;br /&gt;
&lt;br /&gt;
=== Where does AJAX fit into in MVC ? ===&lt;br /&gt;
&lt;br /&gt;
==== 1. JAVA ====&lt;br /&gt;
&lt;br /&gt;
==== 2. PHP ====&lt;br /&gt;
&lt;br /&gt;
PHP supports JSON encoding by  default, this allows you to pass complex data types back and forth  between PHP and Javascript fairly easily.Consider this simple example.[http://www.ajaxf1.com/tutorial/ajax-php.html?page=2]&lt;br /&gt;
	&lt;br /&gt;
To demonstrate the AJAX PHP connection we will create a very simple form with 2 input fields. In the first field you can type any text and we will send this text to our PHP script which will convert it to uppercase and sends it back to us.&lt;br /&gt;
&lt;br /&gt;
''' CLIENT SIDE CODE ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Get the HTTP Object&lt;br /&gt;
function getHTTPObject(){&lt;br /&gt;
   if (window.ActiveXObject) &lt;br /&gt;
       return new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
   else if (window.XMLHttpRequest)//catches the response from the server &lt;br /&gt;
       return new XMLHttpRequest();//this object is for AJAX PHP communication &lt;br /&gt;
   else {&lt;br /&gt;
      alert(&amp;quot;Your browser does not support AJAX.&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Change the value of the outputText field&lt;br /&gt;
function setOutput(){&lt;br /&gt;
    if(httpObject.readyState == 4){&lt;br /&gt;
        document.getElementById('outputText').value = httpObject.responseText;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement business logic    &lt;br /&gt;
function doWork(){    &lt;br /&gt;
    httpObject = getHTTPObject();&lt;br /&gt;
    if (httpObject != null) {&lt;br /&gt;
        httpObject.open(&amp;quot;GET&amp;quot;, &amp;quot;upperCase.php?inputText=&amp;quot;&lt;br /&gt;
                        +document.getElementById('inputText').value, true);&lt;br /&gt;
        httpObject.send(null); &lt;br /&gt;
        httpObject.onreadystatechange = setOutput;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;form name=&amp;quot;testForm&amp;quot;&amp;gt;&lt;br /&gt;
     Input text: &amp;lt;input type=&amp;quot;text&amp;quot;  onkeyup=&amp;quot;doWork();&amp;quot; name=&amp;quot;inputText&amp;quot; id=&amp;quot;inputText&amp;quot; /&amp;gt; &lt;br /&gt;
     Output text: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;outputText&amp;quot; id=&amp;quot;outputText&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&lt;br /&gt;
Server side functionality is very simple compared to the client side. In the PHP code we just need to check the $_GET super-global array. Afterwards convert it to uppercase and echo the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    if (isset($_GET['inputText'])) &lt;br /&gt;
       echo strtoupper($_GET['inputText']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 3. RAILS ====&lt;br /&gt;
&lt;br /&gt;
Rails provide support for AJAX in the form of helper methods. There is no need to add Javascript code in the view templates. Instead, the helper methods create the Javascript code in the html page derived from the view templates. One of the ways this could be understood is through an example [http://onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html] of link_to_remote() method which can be used to get the latest time from a server and display it on a web page.Here is a sample view template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ajax Demo&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;%= javascript_include_tag &amp;quot;prototype&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;What time is it?&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;time_div&amp;quot;&amp;gt;&lt;br /&gt;
      I don't have the time, but&lt;br /&gt;
      &amp;lt;%= link_to_remote( &amp;quot;click here&amp;quot;,&lt;br /&gt;
                         :update =&amp;gt; &amp;quot;time_div&amp;quot;,&lt;br /&gt;
                         :url =&amp;gt;{ :action =&amp;gt; :say_when }) %&amp;gt;&lt;br /&gt;
      and I will look it up.&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this view does this is that it gives a link to display the current time. The current time would be fetched in the background without refreshing the browser. Now, there are two main helper methods to do this job. One of them is javascript_include_tag() that includes the Prototype JavaScript library. This is included with Rails package and is a basic requirement to make use of AJAX functionality.  The other is link_to_remote() call that talks to the remote server when a request for current time is made.&lt;br /&gt;
Here is a brief explanation of the parameters used in this method:&lt;br /&gt;
&lt;br /&gt;
#'''click_here''' :  this is the text for displaying the link&lt;br /&gt;
#'''time_div'''  : it is the id of the HTML DOM element  that would have the current time content&lt;br /&gt;
#'''url'''       : refers to the server side action and it is say_when in this case&lt;br /&gt;
&lt;br /&gt;
[[Image:ajaxinrails_fig1.png]]                        [[Image:ajaxinrails_fig2.png]]&lt;br /&gt;
&lt;br /&gt;
The role of the index action is to render the index.html file which displays the ‘before’ view. The controller is named demo and is coded as,&lt;br /&gt;
&lt;br /&gt;
''' SERVER SIDE CODE '''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class DemoController &amp;lt; ApplicationController&lt;br /&gt;
  def index&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def say_when&lt;br /&gt;
    render_text &amp;quot;&amp;lt;p&amp;gt;The time is &amp;lt;b&amp;gt;&amp;quot; + DateTime.now.to_s + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When  “click here” is clicked on we would see the ‘after’ view which is shown above. What happens over here is that when a user clicks on “click me” an XMLHttpRequest is created by the browser and sent to the server where  in the server invokes the say_when action and renders the HTML response fragment containing the current time. When the client side Javascript receives the response it replaces the contents of the div with an id of time_div.Besides the above example, there are other AJAX helper methods like the form method, i.e., form_remote_tag(). Here, is a prototype for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%= form_remote_tag :url =&amp;gt; { :action =&amp;gt; 'create' },&lt;br /&gt;
  		     :update =&amp;gt; ‘ajax_result’ %&amp;gt; 	&lt;br /&gt;
	&amp;lt;%= render :partial =&amp;gt; ‘form’ %&amp;gt; &lt;br /&gt;
	&amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajax in Ruby has immense potential in its application and can add to the efficiency as well as to the looks of a web template. In order to get a more in depth foot in Ajax on Rails , there is a very popular book [http://oreilly.com/catalog/9780596527440 “Ajax on Rails”] by Scott Raymond and published by O’Reilly.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxinrails_fig2.png&amp;diff=25156</id>
		<title>File:Ajaxinrails fig2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxinrails_fig2.png&amp;diff=25156"/>
		<updated>2009-10-10T00:47:46Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxinrails_fig1.png&amp;diff=25139</id>
		<title>File:Ajaxinrails fig1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ajaxinrails_fig1.png&amp;diff=25139"/>
		<updated>2009-10-10T00:44:41Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19592</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19592"/>
		<updated>2009-09-17T02:54:40Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The objective over here is to examine the different functionality offered by the different IDEs for Ruby, such as Aptana, NetBeans, and RubyMine. And compare them along dimensions such as facilities, ease of use, system requirements, and support for the Ruby way of thinking.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several [http://en.wikipedia.org/wiki/Integrated_development_environment IDEs] that can be used as a tool in the development of [http://www.ruby-lang.org/en/ Ruby] and [http://rubyonrails.org/ Ruby on Rails] project. Some of them are [http://www.activestate.com/komodo/ ActiveState Komodo], [http://www.embarcadero.com/products/3rdrail Embarcadero 3rd Rail], [http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php Arachno Ruby], [http://www.mondrian-ide.com/ Mondrian Ruby],[http://www.jetbrains.com/ruby/index.html RubyMine] , [http://www.netbeans.org/ Netbeans], [http://aptana.com/ Eclipse plug-in such as Aptana RadRails]. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e.,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The parameters defined in comparing the three IDEs have been inherited from the Aptana site and extended to RubyMine. Moreover, there are a few terms that may be new to certain readers. Appropriate links (highlighted in blue) have been provided for them below. Once the facilities have been over viewed, one can follow the next section in order to see that how can these facilities be used by a programmer.  &lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JRuby Bundled JRuby Interpreter]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HTML HTML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/CSS CSS] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JSON JSON] Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/SQL SQL] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Yml YML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RHTML RHTML/ERb] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/XML XML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_completion Code Completion]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Type_inference Type Inference]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Static_code_analysis Code analysis] (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Mylyn Mylyn] Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_refactoring '''Refactoring''']||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing Test::Unit] view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://ph7spot.com/articles/getting_started_with_autotest AutoTest]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RSpec RSpec] support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.jetbrains.com/ruby/features/ruby_unit_testing.html#Cucumber Cucumber]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How-to Create Projects &amp;amp; use Facilities ? ==&lt;br /&gt;
&lt;br /&gt;
=== Aptana RadRails ===&lt;br /&gt;
&lt;br /&gt;
Aptana provides Rails tutorial by creating a [http://www.aptana.com/docs/index.php/ 'CookBook database and application'].For getting to know more about the Aptana plug-in for Eclipse, IBM provides a useful link : [http://www.ibm.com/developerworks/opensource/library/os-rubyeclipse/ 'Using the Ruby Development tools in Eclipse']. &lt;br /&gt;
&lt;br /&gt;
         Editing : http://aptana.com/docs/index.php/Ruby_Editor&lt;br /&gt;
         Testing : http://www.aptana.com/docs/index.php/Running_a_Test::Unit_Test_%28Ruby%29&lt;br /&gt;
         Debugger: http://aptana.com/docs/index.php/Ruby_Debugger&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a very good book , &amp;quot;Aptana RadRails: An IDE for Rails Development&amp;quot; by [http://www.linkedin.com/pub/javier-ramirez/1/429/219 Javier Ramirez] that takes a comprehensive look over Aptana Rails covering the whole development cycle. It covers from Code Assistance, Graphical Debugger, Testing, Integrated Console to managing gems, plug-ins, servers, generators, and Rake tasks. It also has a chapter about Subversion and Database integration and smart Code Assistants for HTML, JavaScript, and CSS.&lt;br /&gt;
&lt;br /&gt;
===  NetBeans ===&lt;br /&gt;
&lt;br /&gt;
NetBeans Ruby Project tutorial can get one started with the [http://www.netbeans.org/kb/docs/ruby/quickstart.html first Ruby program in it's IDE]. Another [http://wiki.netbeans.org/RubyOnRails tutorial on Ruby on Rails] is a good way to get more acquainted with the IDE.&lt;br /&gt;
To get to know more and make use of the facilities such as editing , refactoring, testing and debugging features, they are mentioned in NetBeans Ruby documentation.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
         Editing : http://wiki.netbeans.org/RubyEditing&lt;br /&gt;
         Refactoring : http://wiki.netbeans.org/RubyRefactoring&lt;br /&gt;
         Testing : http://wiki.netbeans.org/RubyTesting&lt;br /&gt;
         Debugging : http://wiki.netbeans.org/RubyDebugging&lt;br /&gt;
         Code Coverage Support : http://wiki.netbeans.org/RubyCodeCoverage&lt;br /&gt;
         Quickfixes and Hints : http://wiki.netbeans.org/RubyHints&lt;br /&gt;
         Rake tasks : http://wiki.netbeans.org/RubyRake&lt;br /&gt;
&lt;br /&gt;
=== RubyMine ===&lt;br /&gt;
&lt;br /&gt;
RubyMine provides a good example to get started with a simple Rails project in the 'Create and Run your First Project' section provided in the [http://www.jetbrains.com/ruby/webhelp/index.jsp RubyMine Web help page]. A simple Ruby project can also be built based on similar lines.&lt;br /&gt;
RubyMine also provides handy examples with screen shots that can guide a programmer with the process of applying these features in Ruby and Rails projects.It provides an interesting set of tools for Ruby and Rails such as code completion, refactorings, code analysis and also talks about Intelligent Code Assistance, Testing methods such as RSpec, Cucumber and Test::Unit integration. For debugging it provides an entire debugging GUI with version control systems integration. &lt;br /&gt;
&lt;br /&gt;
         Editing and Refactoring: http://www.jetbrains.com/ruby/features/ruby_ide.html&lt;br /&gt;
         Testing : http://www.jetbrains.com/ruby/features/ruby_unit_testing.html&lt;br /&gt;
         Debugging : http://www.jetbrains.com/ruby/features/ruby_debugger.html&lt;br /&gt;
         Rail editor features : http://www.jetbrains.com/ruby/features/rails_editor.html&lt;br /&gt;
         Intelligent Coding Assistance : http://www.jetbrains.com/ruby/features/ruby_coding.html&lt;br /&gt;
         Version Control : http://www.jetbrains.com/ruby/features/ruby_version_control.html  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# Aptana Proponent’s View&lt;br /&gt;
## [http://blog.hulihanapplications.com/browse/view/12 Aptana View 1]  &lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
## [http://www.mslater.com/tags/netbeans%20radrails%20aptana NetBeans View 4]&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails.Here, is the link for installing Ruby on Windows/Mac OS X/Linux: [http://www.ruby-lang.org/en/downloads/ Ruby Downloads]&lt;br /&gt;
&lt;br /&gt;
For installing Rails in Windows use the RubyGems package manager to install it. Update the gem repository by entering,&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;pre&amp;gt;gem update -–system&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And then install Rails by executing the following statement,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;gem install rails&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Mac and Linux versions come shipped with the most stable and versions of Ruby and Rails.For updating Rails enter,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;sudo gem install rails&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 ,Ruby 1.8/Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||1 GB of free disk space ||Size : 70.94 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more ||850 MB of free disk space ||Size : 74.82 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||850 MB of free disk space ||Size : 52.22 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by [http://www.informit.com/authors/bio.aspx?a=b17530ef-9081-4984-9000-a6c915c0c088 Hal Fulton], the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== Conclusion  ==&lt;br /&gt;
&lt;br /&gt;
Starting with an aim to understand the functionality available in Aptana Radrails, NetBeans and RubyMine, we covered various issues ranging from facilities and their usage, ease of use and hardware and the software requirements to the support for the Ruby Way of thinking. There are pros and cons to every IDE. As a matter of fact only a Ruby programmer can decide what suits best for him. We have tried to present all the relevant information in terms of comparison among the IDEs including some blogs from various other Ruby users which are not meant to bias but help a programmer in deciding the best IDE for him. Besides this, there are numerous others IDEs that Ruby fans can test out themselves.    &lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19167</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19167"/>
		<updated>2009-09-15T01:01:25Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The objective over here is to examine the different functionality offered by the different IDEs for Ruby, such as Aptana, NetBeans, and RubyMine. And compare them along dimensions such as facilities, ease of use, system requirements, and support for the Ruby way of thinking.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several [http://en.wikipedia.org/wiki/Integrated_development_environment IDEs] that can be used as a tool in the development of [http://www.ruby-lang.org/en/ Ruby] and [http://rubyonrails.org/ Ruby on Rails] project. Some of them are [http://www.activestate.com/komodo/ ActiveState Komodo], [http://www.embarcadero.com/products/3rdrail Embarcadero 3rd Rail], [http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php Arachno Ruby], [http://www.mondrian-ide.com/ Mondrian Ruby],[http://www.jetbrains.com/ruby/index.html RubyMine] , [http://www.netbeans.org/ Netbeans], [http://aptana.com/ Eclipse plug-in such as Aptana RadRails]. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e.,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JRuby Bundled JRuby Interpreter]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HTML HTML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/CSS CSS] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JSON JSON] Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/SQL SQL] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Yml YML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RHTML RHTML/ERb] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/XML XML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_completion Code Completion]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Type_inference Type Inference]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Static_code_analysis Code analysis] (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Mylyn Mylyn] Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_refactoring '''Refactoring''']||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing Test::Unit] view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://ph7spot.com/articles/getting_started_with_autotest AutoTest]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RSpec RSpec] support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.jetbrains.com/ruby/features/ruby_unit_testing.html#Cucumber Cucumber]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How-to Create Projects &amp;amp; use Facilities ? ==&lt;br /&gt;
&lt;br /&gt;
=== Aptana RadRails ===&lt;br /&gt;
&lt;br /&gt;
Aptana provides Rails tutorial by creating a [http://www.aptana.com/docs/index.php/ 'CookBook database and application'].For getting to know more about the Aptana plug-in for Eclipse, IBM provides a useful link : [http://www.ibm.com/developerworks/opensource/library/os-rubyeclipse/ 'Using the Ruby Development tools in Eclipse']. &lt;br /&gt;
&lt;br /&gt;
         Editing : http://aptana.com/docs/index.php/Ruby_Editor&lt;br /&gt;
         Testing : http://www.aptana.com/docs/index.php/Running_a_Test::Unit_Test_%28Ruby%29&lt;br /&gt;
         Debugger: http://aptana.com/docs/index.php/Ruby_Debugger&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a very good book , &amp;quot;Aptana RadRails: An IDE for Rails Development&amp;quot; by [http://www.linkedin.com/pub/javier-ramirez/1/429/219 Javier Ramirez] that takes a comprehensive look over Aptana Rails covering the whole development cycle. It covers from Code Assistance, Graphical Debugger, Testing, Integrated Console to managing gems, plug-ins, servers, generators, and Rake tasks. It also has a chapter about Subversion and Database integration and smart Code Assistants for HTML, JavaScript, and CSS.&lt;br /&gt;
&lt;br /&gt;
===  NetBeans ===&lt;br /&gt;
&lt;br /&gt;
NetBeans Ruby Project tutorial can get one started with the [http://www.netbeans.org/kb/docs/ruby/quickstart.html first Ruby program in it's IDE]. Another [http://wiki.netbeans.org/RubyOnRails tutorial on Ruby on Rails] is a good way to get more acquainted with the IDE.&lt;br /&gt;
To get to know more and make use of the facilities such as editing , refactoring, testing and debugging features, they are mentioned in NetBeans Ruby documentation.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
         Editing : http://wiki.netbeans.org/RubyEditing&lt;br /&gt;
         Refactoring : http://wiki.netbeans.org/RubyRefactoring&lt;br /&gt;
         Testing : http://wiki.netbeans.org/RubyTesting&lt;br /&gt;
         Debugging : http://wiki.netbeans.org/RubyDebugging&lt;br /&gt;
         Code Coverage Support : http://wiki.netbeans.org/RubyCodeCoverage&lt;br /&gt;
         Quickfixes and Hints : http://wiki.netbeans.org/RubyHints&lt;br /&gt;
         Rake tasks : http://wiki.netbeans.org/RubyRake&lt;br /&gt;
&lt;br /&gt;
=== RubyMine ===&lt;br /&gt;
&lt;br /&gt;
RubyMine provides a good example to get started with a simple Rails project in the 'Create and Run your First Project' section provided in the [http://www.jetbrains.com/ruby/webhelp/index.jsp RubyMine Web help page]. A simple Ruby project can also be built based on similar lines.&lt;br /&gt;
RubyMine also provides handy examples with screen shots that can guide a programmer with the process of applying these features in Ruby and Rails projects.It provides an interesting set of tools for Ruby and Rails such as code completion, refactorings, code analysis and also talks about Intelligent Code Assistance, Testing methods such as RSpec, Cucumber and Test::Unit integration. For debugging it provides an entire debugging GUI with version control systems integration. &lt;br /&gt;
&lt;br /&gt;
         Editing and Refactoring: http://www.jetbrains.com/ruby/features/ruby_ide.html&lt;br /&gt;
         Testing : http://www.jetbrains.com/ruby/features/ruby_unit_testing.html&lt;br /&gt;
         Debugging : http://www.jetbrains.com/ruby/features/ruby_debugger.html&lt;br /&gt;
         Rail editor features : http://www.jetbrains.com/ruby/features/rails_editor.html&lt;br /&gt;
         Intelligent Coding Assistance : http://www.jetbrains.com/ruby/features/ruby_coding.html&lt;br /&gt;
         Version Control : http://www.jetbrains.com/ruby/features/ruby_version_control.html  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# Aptana Proponent’s View&lt;br /&gt;
## [http://blog.hulihanapplications.com/browse/view/12 Aptana View 1]  &lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
## [http://www.mslater.com/tags/netbeans%20radrails%20aptana NetBeans View 4]&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails.Here, is the link for installing Ruby on Windows/Mac OS X/Linux: [http://www.ruby-lang.org/en/downloads/ Ruby Downloads]&lt;br /&gt;
&lt;br /&gt;
For installing Rails in Windows use the RubyGems package manager to install it. Update the gem repository by entering,&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;pre&amp;gt;gem update -–system&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And then install Rails by executing the following statement,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;gem install rails&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Mac and Linux versions come shipped with the most stable and versions of Ruby and Rails.For updating Rails enter,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;sudo gem install rails&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 ,Ruby 1.8/Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||1 GB of free disk space ||Size : 70.94 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more ||850 MB of free disk space ||Size : 74.82 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||850 MB of free disk space ||Size : 52.22 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by [http://www.informit.com/authors/bio.aspx?a=b17530ef-9081-4984-9000-a6c915c0c088 Hal Fulton], the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== Conclusion  ==&lt;br /&gt;
&lt;br /&gt;
Starting with an aim to understand the functionality available in Aptana Radrails, NetBeans and RubyMine, we covered various issues ranging from facilities and their usage, ease of use and hardware and the software requirements to the support for the Ruby Way of thinking. There are pros and cons to every IDE. As a matter of fact only a Ruby programmer can decide what suits best for him. We have tried to present all the relevant information in terms of comparison among the IDEs including some blogs from various other Ruby users which are not meant to bias but help a programmer in deciding the best IDE for him. Besides this, there are numerous others IDEs that Ruby fans can test out themselves.    &lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19166</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19166"/>
		<updated>2009-09-14T23:12:09Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The objective over here is to examine the different functionality offered by the different IDEs for Ruby, such as Aptana, NetBeans, and RubyMine. And compare them along dimensions such as facilities, ease of use, system requirements, and support for the Ruby way of thinking.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several [http://en.wikipedia.org/wiki/Integrated_development_environment IDEs] that can be used as a tool in the development of [http://www.ruby-lang.org/en/ Ruby] and [http://rubyonrails.org/ Ruby on Rails] project. Some of them are [http://www.activestate.com/komodo/ ActiveState Komodo], [http://www.embarcadero.com/products/3rdrail Embarcadero 3rd Rail], [http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php Arachno Ruby], [http://www.mondrian-ide.com/ Mondrian Ruby],[http://www.jetbrains.com/ruby/index.html RubyMine] , [http://www.netbeans.org/ Netbeans], [http://aptana.com/ Eclipse plug-in such as Aptana RadRails]. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e.,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JRuby Bundled JRuby Interpreter]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HTML HTML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/CSS CSS] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JSON JSON] Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/SQL SQL] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Yml YML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RHTML RHTML/ERb] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/XML XML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_completion Code Completion]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Type_inference Type Inference]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Static_code_analysis Code analysis] (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Mylyn Mylyn] Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_refactoring '''Refactoring''']||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing Test::Unit] view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://ph7spot.com/articles/getting_started_with_autotest AutoTest]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RSpec RSpec] support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.jetbrains.com/ruby/features/ruby_unit_testing.html#Cucumber Cucumber]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How-to Create Projects &amp;amp; use Facilities ? ==&lt;br /&gt;
&lt;br /&gt;
=== Aptana RadRails ===&lt;br /&gt;
&lt;br /&gt;
Aptana provides Rails tutorial by creating a [http://www.aptana.com/docs/index.php/ 'CookBook database and application'].For getting to know more about the Aptana plug-in for Eclipse, IBM provides a useful link : [http://www.ibm.com/developerworks/opensource/library/os-rubyeclipse/ 'Using the Ruby Development tools in Eclipse']. &lt;br /&gt;
&lt;br /&gt;
         Editing : http://aptana.com/docs/index.php/Ruby_Editor&lt;br /&gt;
         Testing : http://www.aptana.com/docs/index.php/Running_a_Test::Unit_Test_%28Ruby%29&lt;br /&gt;
         Debugger: http://aptana.com/docs/index.php/Ruby_Debugger&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a very good book , &amp;quot;Aptana RadRails: An IDE for Rails Development&amp;quot; by [http://www.linkedin.com/pub/javier-ramirez/1/429/219 Javier Ramirez] that takes a comprehensive look over Aptana Rails covering the whole development cycle. It covers from Code Assistance, Graphical Debugger, Testing, Integrated Console to managing gems, plug-ins, servers, generators, and Rake tasks. It also has a chapter about Subversion and Database integration and smart Code Assistants for HTML, JavaScript, and CSS.&lt;br /&gt;
&lt;br /&gt;
===  NetBeans ===&lt;br /&gt;
&lt;br /&gt;
NetBeans Ruby Project tutorial can get one started with the [http://www.netbeans.org/kb/docs/ruby/quickstart.html first Ruby program in it's IDE]. Another [http://wiki.netbeans.org/RubyOnRails tutorial on Ruby on Rails] is a good way to get more acquainted with the IDE.&lt;br /&gt;
To get to know more and make use of the facilities such as editing , refactoring, testing and debugging features, they are mentioned in NetBeans Ruby documentation.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
         Editing : http://wiki.netbeans.org/RubyEditing&lt;br /&gt;
         Refactoring : http://wiki.netbeans.org/RubyRefactoring&lt;br /&gt;
         Testing : http://wiki.netbeans.org/RubyTesting&lt;br /&gt;
         Debugging : http://wiki.netbeans.org/RubyDebugging&lt;br /&gt;
         Code Coverage Support : http://wiki.netbeans.org/RubyCodeCoverage&lt;br /&gt;
         Quickfixes and Hints : http://wiki.netbeans.org/RubyHints&lt;br /&gt;
         Rake tasks : http://wiki.netbeans.org/RubyRake&lt;br /&gt;
&lt;br /&gt;
=== RubyMine ===&lt;br /&gt;
&lt;br /&gt;
RubyMine provides a good example to get started with a simple Rails project in the 'Create and Run your First Project' section provided in the [http://www.jetbrains.com/ruby/webhelp/index.jsp RubyMine Web help page]. A simple Ruby project can also be built based on similar lines.&lt;br /&gt;
RubyMine also provides handy examples with screen shots that can guide a programmer with the process of applying these features in Ruby and Rails projects.It provides an interesting set of tools for Ruby and Rails such as code completion, refactorings, code analysis and also talks about Intelligent Code Assistance, Testing methods such as RSpec, Cucumber and Test::Unit integration. For debugging it provides an entire debugging GUI with version control systems integration. &lt;br /&gt;
&lt;br /&gt;
         Editing and Refactoring: http://www.jetbrains.com/ruby/features/ruby_ide.html&lt;br /&gt;
         Testing : http://www.jetbrains.com/ruby/features/ruby_unit_testing.html&lt;br /&gt;
         Debugging : http://www.jetbrains.com/ruby/features/ruby_debugger.html&lt;br /&gt;
         Rail editor features : http://www.jetbrains.com/ruby/features/rails_editor.html&lt;br /&gt;
         Intelligent Coding Assistance : http://www.jetbrains.com/ruby/features/ruby_coding.html&lt;br /&gt;
         Version Control : http://www.jetbrains.com/ruby/features/ruby_version_control.html  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# Aptana Proponent’s View&lt;br /&gt;
## [http://blog.hulihanapplications.com/browse/view/12 Aptana View 1]  &lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
## [http://www.mslater.com/tags/netbeans%20radrails%20aptana NetBeans View 4]&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails.Here, is the link for installing Ruby on Windows/Mac OS X/Linux: [http://www.ruby-lang.org/en/downloads/ Ruby Downloads]&lt;br /&gt;
&lt;br /&gt;
For installing Rails in Windows use the RubyGems package manager to install it. Update the gem repository by entering,&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;pre&amp;gt;gem update -–system&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And then install Rails by executing the following statement,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;gem install rails&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Mac and Linux versions come shipped with the most stable and versions of Ruby and Rails.For updating Rails enter,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;sudo gem install rails&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 ,Ruby 1.8/Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||1 GB of free disk space ||Size : 70.94 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more ||850 MB of free disk space ||Size : 74.82 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||850 MB of free disk space ||Size : 52.22 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by [http://www.informit.com/authors/bio.aspx?a=b17530ef-9081-4984-9000-a6c915c0c088 Hal Fulton], the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19162</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19162"/>
		<updated>2009-09-14T17:43:49Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The objective over here is to examine the different functionality offered by the different IDEs for Ruby, such as Aptana, NetBeans, and RubyMine. And compare them along dimensions such as facilities, ease of use, system requirements, and support for the Ruby way of thinking.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several [http://en.wikipedia.org/wiki/Integrated_development_environment IDEs] that can be used as a tool in the development of [http://www.ruby-lang.org/en/ Ruby] and [http://rubyonrails.org/ Ruby on Rails] project. Some of them are [http://www.activestate.com/komodo/ ActiveState Komodo], [http://www.embarcadero.com/products/3rdrail Embarcadero 3rd Rail], [http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php Arachno Ruby], [http://www.mondrian-ide.com/ Mondrian Ruby],[http://www.jetbrains.com/ruby/index.html RubyMine] , [http://www.netbeans.org/ Netbeans], [http://aptana.com/ Eclipse plug-in such as Aptana RadRails]. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e.,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JRuby Bundled JRuby Interpreter]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/HTML HTML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/CSS CSS] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JavaScript JavaScript] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/JSON JSON] Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/SQL SQL] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Yml YML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RHTML RHTML/ERb] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/XML XML] Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_completion Code Completion]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Type_inference Type Inference]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Static_code_analysis Code analysis] (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Mylyn Mylyn] Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Code_refactoring '''Refactoring''']||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing Test::Unit] view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://ph7spot.com/articles/getting_started_with_autotest AutoTest]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/RSpec RSpec] support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.jetbrains.com/ruby/features/ruby_unit_testing.html#Cucumber Cucumber]||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# Aptana Proponent’s View&lt;br /&gt;
## [http://blog.hulihanapplications.com/browse/view/12 Aptana View 1]  &lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
## [http://www.mslater.com/tags/netbeans%20radrails%20aptana NetBeans View 4]&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails.Here, is the link for installing Ruby on Windows/Mac OS X/Linux: [http://www.ruby-lang.org/en/downloads/ Ruby Downloads]&lt;br /&gt;
&lt;br /&gt;
For installing Rails in Windows use the RubyGems package manager to install it. Update the gem repository by entering,&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;pre&amp;gt;gem update -–system&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And then install Rails by executing the following statement,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;gem install rails&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Mac and Linux versions come shipped with the most stable and versions of Ruby and Rails.For updating Rails enter,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;sudo gem install rails&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 ,Ruby 1.8/Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||1 GB of free disk space ||Size : 70.94 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more ||850 MB of free disk space ||Size : 74.82 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||850 MB of free disk space ||Size : 52.22 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19098</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=19098"/>
		<updated>2009-09-12T16:09:43Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The objective over here is to examine the different functionality offered by the different IDEs for Ruby, such as Aptana, NetBeans, and RubyMine. And compare them along dimensions such as facilities, ease of use, system requirements, and support for the Ruby way of thinking.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDEs that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e.,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# Aptana Proponent’s View&lt;br /&gt;
## [http://blog.hulihanapplications.com/browse/view/12 Aptana View 1]  &lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
## [http://www.mslater.com/tags/netbeans%20radrails%20aptana NetBeans View 4]&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails.Here, is the link for installing Ruby on Windows/Mac OS X/Linux: [http://www.ruby-lang.org/en/downloads/ Ruby Downloads]&lt;br /&gt;
&lt;br /&gt;
For installing Rails in Windows use the RubyGems package manager to install it. Update the gem repository by entering,&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;pre&amp;gt;gem update -–system&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And then install Rails by executing the following statement,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;gem install rails&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The Mac and Linux versions come shipped with the most stable and versions of Ruby and Rails.For updating Rails enter,&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;pre&amp;gt;sudo gem install rails&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 ,Ruby 1.8/Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||1 GB of free disk space ||Size : 70.94 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more ||850 MB of free disk space ||Size : 74.82 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 min. screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (min)/1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||Size : 71.9 MB (Eclipse plug-in) or more||850 MB of free disk space ||Size : 52.22 MB or more&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18272</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18272"/>
		<updated>2009-09-07T21:07:24Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDEs that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18271</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18271"/>
		<updated>2009-09-07T21:05:54Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Ease of Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDEs that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDEs view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDEs are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDEs. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# # http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18270</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18270"/>
		<updated>2009-09-07T21:05:18Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDEs that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDEs for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDEs. The measuring scale in comparing the three IDEs has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# # http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18269</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18269"/>
		<updated>2009-09-07T21:04:51Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* IDEs FOR RUBY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDEs that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDEs ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# # http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18268</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18268"/>
		<updated>2009-09-07T21:03:13Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Support for the 'Ruby Way of Thinking' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
'''Aptana RadRails'''&lt;br /&gt;
&lt;br /&gt;
# http://aptana.com/taxonomy/term/61 - Aptana Ruby Features&lt;br /&gt;
# http://www.ibm.com/developerworks/opensource/library/os-ecl-radrails/ - Aptana Quick Start Tutorial&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration#Instructions_For_Eclipse_3.2 – Aptana  Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana#Aptana_M8a.2FEclipse_3.2.2FRails_plug-in_Instructions – RadRail Plugin for Eclipse&lt;br /&gt;
# http://www.aptana.com/docs/index.php/Aptana_System_Requirements - Aptana System Requirements&lt;br /&gt;
&lt;br /&gt;
'''NetBeans'''&lt;br /&gt;
&lt;br /&gt;
# http://www.netbeans.org/features/ruby/index.html - NetBeans Ruby Features&lt;br /&gt;
# http://www.netbeans.org/kb/docs/ruby/quickstart.html - NetBeans Quick Start Tutorial&lt;br /&gt;
# # http://beans.seartipy.com/2008/06/09/setting-up-rails-development-environment-on-windows-vistaxp/ - Setting up Rails Development Environment&lt;br /&gt;
# http://wiki.netbeans.org/RubyDocumentation - NetBeans Ruby Documentation&lt;br /&gt;
# http://www.netbeans.org/community/releases/67/relnotes.html#system_requirements -  NetBeans System Requirements&lt;br /&gt;
&lt;br /&gt;
'''RubyMine'''&lt;br /&gt;
&lt;br /&gt;
# http://www.jetbrains.com/ruby/features/index.html - RubyMine Features&lt;br /&gt;
# http://www.jetbrains.com/ruby/documentation/index.html - RubyMine Quick Start Tutorial&lt;br /&gt;
# http://www.jetbrains.com/ruby/webhelp/index.jsp - RubyMine Documentation&lt;br /&gt;
# http://www.jetbrains.com/ruby/download/index.html - RubyMine System Requirements&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18226</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18226"/>
		<updated>2009-09-07T20:26:48Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* IDEs FOR RUBY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== IDEs FOR RUBY ==&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18222</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18222"/>
		<updated>2009-09-07T20:21:48Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* System Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDEs FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support for the 'Ruby Way of Thinking' ==&lt;br /&gt;
&lt;br /&gt;
The ideology behind the Ruby way of thinking is the Principle of Least Surprise or POLS which says that a program should be intuitive and least astonishing in its behavior or response.  As told by Hal Fulton, the author of the “The Ruby Way”, the creators of Ruby want to have it as ‘Human Centric’ as possible. This would help the programmers to achieve their objectives without bothering about the complex idiosyncrasies of the language. This is done by hiding behind the complexity and only showing the relevant syntax needed to produce the desired output.   &lt;br /&gt;
&lt;br /&gt;
When it comes to the IDEs, we can apply the POLS on different IDEs design and the various tools/features they offer to assist a programmer in Ruby development. The parameters to evaluate an IDE in conjunction with the Ruby way of thinking could be defined as a function of the features such as run time performance, code debugging, refactoring and other tools that can definitely ease a programmer’s way. Therefore, with the above mentioned facilities the three IDEs certainly support the ruby way of thinking in different styles.&lt;br /&gt;
&lt;br /&gt;
To read more about the Ruby way of thinking, click on the link to an article by Hal Fulton :[http://www.infoq.com/articles/what-is-the-ruby-way The Ruby Way of Thinking]&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18131</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18131"/>
		<updated>2009-09-07T18:58:23Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* IDE’S FOR RUBY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDEs FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18127</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18127"/>
		<updated>2009-09-07T18:53:58Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes (Pro)||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18122</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18122"/>
		<updated>2009-09-07T18:52:06Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Hardware Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Other||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18108</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18108"/>
		<updated>2009-09-07T18:37:52Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Hardware Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18107</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18107"/>
		<updated>2009-09-07T18:36:49Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Ease of Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;br /&gt;
&lt;br /&gt;
== System Requirements == &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Before installing the IDE’s it is recommended to install the basic dependencies, i.e., Ruby, Ruby Gems and Rails. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
The hardware needs for a particular OS are tabulated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Apatana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NetBeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Version ||Aptana 1.5.1||6.7.1 (support : Ruby 1.8 and Rails 2.1).||Version 1.1.1, Build 975&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Microsoft Windows''' ||(no preferences mentioned)||Vista/XP||Vista/2003/XP/2000&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||1 GB of free disk space ||File size : 70.94 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Mac OS X''' ||(no preferences mentioned)||10.5 Intel/PPC||10.4 (Tiger) or MacOS X 10.5 (Leopard)&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||G5 or Intel-based machine ||Dual-Core Intel/ Power PC G5||1.42 GHz G4, G5 or Intel-based Mac recommended&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB ||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 74.82 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Ruby SDK version 1.8.x or higher,1024x768 minimum screen resolution &lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Linux'''||(no preferences mentioned)||Ubuntu 8.x||GNOME or KDE desktop&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Processor||Pentium 4-level processor ||2.6 GHz Intel Pentium IV or equivalent||Intel Pentium III/800 MHz or higher (or compatible)&lt;br /&gt;
|-&lt;br /&gt;
| Memory||512 MB RAM||2 GB||256 MB (minmum) and  1 GB (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Disk Space||File size : 71.9 MB as Eclipse plug in. No mention about the disk size||850 MB of free disk space ||File size : 52.22 MB. No mention about the disk size&lt;br /&gt;
|-&lt;br /&gt;
| Others||Nil||Nil||Sun JDK 1.6, Ruby SDK version 1.8.x or higher&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18066</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18066"/>
		<updated>2009-09-07T17:53:24Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Ease of Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to different IDE user's. The links are only adding to the list of reviews on the IDE's. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE that fits their choice.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18065</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18065"/>
		<updated>2009-09-07T17:51:24Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Ease of Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;br /&gt;
&lt;br /&gt;
The views expressed above are independent and in no way can be authenticated. The author of this wiki page has no intention of showing any bias to any particular set of IDE user's. The links are only adding to the list of reviews on the IDEs we are trying yo make a survey on. This may possibly help the future Ruby Programmers in making a fair decision to go in for an IDE of their choice.&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18061</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18061"/>
		<updated>2009-09-07T17:44:52Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ease of Use ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s provide a separate set of features and it is up to a programmer to decide what he is really looking for in order to develop his project in the most timely and efficient way possible. From the facilities tabulated above, Aptana Radrails stands out with respect to Netbeans and RubyMine.  However, the proponents of the IDE’s view their product better in terms of accuracy and speed in certain areas while promising to introduce new features in future. Some of the web links pointing to the ease of use of these IDE’s are mentioned below:&lt;br /&gt;
&lt;br /&gt;
# RubyMine Proponent’s View &lt;br /&gt;
## [http://www.infoq.com/articles/rubymine-dmitry-jemerov RubyMine View 1]&lt;br /&gt;
# NetBeans Proponent’s View &lt;br /&gt;
## [http://geekninja.blogspot.com/2008/03/rails-ides-netbeans-vs-apatana-radrails.html NetBeans View 1]&lt;br /&gt;
## [http://tnlessone.wordpress.com/2007/02/28/ruby-rails-ide-comparison-idea-netbeans-radrails/ NetBeans View 2]&lt;br /&gt;
## [http://railsbalance.blogspot.com/2008/01/tried-very-hard-for-aptanaradrails.html NetBeans View 3]&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18058</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18058"/>
		<updated>2009-09-07T17:07:27Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* IDE’S FOR RUBY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18056</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18056"/>
		<updated>2009-09-07T17:02:52Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific &amp;quot;shell&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18055</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18055"/>
		<updated>2009-09-07T17:01:06Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* Facilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| '''General'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Interpreter Support/Bundling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Scriptability/Extensibility'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Debugging / Profiling'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Editors'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Ruby Editing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Refactoring'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| '''Testing'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| '''Rails Specific Functionality'''||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific \&amp;quot;shell\&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18052</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18052"/>
		<updated>2009-09-07T16:58:10Z</updated>

		<summary type="html">&lt;p&gt;Araj: /* IDE’S FOR RUBY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facilities ==&lt;br /&gt;
&lt;br /&gt;
The three IDE’s for Ruby vouch to offer a number of useful facilities for Ruby projects. Here, is our analysis of the functionality or features offered on different IDE’s. The measuring scale in comparing the three IDE’s has been inherited from the Aptana site and extended to RubyMine.&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''' Aptana RadRails'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Netbeans'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''RubyMine'''&lt;br /&gt;
|-&lt;br /&gt;
| General||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Price||Free||Free||Free&lt;br /&gt;
|-&lt;br /&gt;
| License Type||Open Source||Open Source||Open Source&lt;br /&gt;
|-&lt;br /&gt;
| Available Standalone or as Eclipse Plugin||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Bundled JRuby Interpreter||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter Support/Bundling||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptability/Extensibility||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Scriptable via Ruby||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugging / Profiling||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Debugger||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) ||Yes ( classic and ruby-debug for MRI; ruby-debug bundled with Jruby) &lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Debugging||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Profiler||Yes (Pro)||No||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Editors||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| HTML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| CSS Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| JSON Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| SQL Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| YML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RHTML/ERb Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| XML Editor||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Editing||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Code Completion||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Inferencing||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Ruby-specific search engine (Find usages)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Code analysis (warnings/errors/hints)||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Type Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Call Hierarchy View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Mylyn Integration||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Regular Expression Tester||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Quick Outline||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Spell Checking Support||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Smart Indent||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Mark Occurrences||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Refactoring||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rename||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Convert Local Variable to field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Encapsulate Field||Yes||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Extract Method||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Extract Constant||Yes||Yes||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Class||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Inline Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Merge Class Parts (internal to file and external)||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Field||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Move Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Push Down Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Pull Up Method||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Split Local Variable||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Override Method||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Introduce Variable||No||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Testing||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Test::Unit view||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| AutoTest||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| RSpec support||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
| ||No||No||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Rails Specific Functionality||||||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Integrated rails-specific \&amp;quot;shell\&amp;quot;||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Log Tail View||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| Embedded browser||Yes||No||No&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18050</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 6 a1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_6_a1&amp;diff=18050"/>
		<updated>2009-09-07T16:53:01Z</updated>

		<summary type="html">&lt;p&gt;Araj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IDE’S FOR RUBY =&lt;br /&gt;
&lt;br /&gt;
There are several IDE’s that can be used as a tool in the development of Ruby and Ruby on the Rails project. Some of them are ActiveState Komodo5, 3rd Rail, Arachno Ruby, Mondrian Ruby, RubyMine , Netbeans, Eclipse plug-in such as Aptana RadRails. In the rest of the content to follow, we will be looking at mainly three Ruby developments IDE’s ,i.e,&lt;br /&gt;
&lt;br /&gt;
# Aptana RadRails &lt;br /&gt;
# Netbeans &lt;br /&gt;
# RubyMine&lt;/div&gt;</summary>
		<author><name>Araj</name></author>
	</entry>
</feed>