<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2930715403086733351</id><updated>2011-11-27T16:26:30.099-08:00</updated><category term='haml'/><category term='calendar'/><category term='KML'/><category term='Rails Dynamic Routes'/><category term='ActiveRecord'/><category term='DRY'/><category term='apache2.0'/><category term='events'/><category term='Elastic Cloud Computing'/><category term='Ajax'/><category term='Google Earth API'/><category term='ActionController'/><category term='Amazon S3'/><category term='KeyHole Markup Language'/><category term='Google Earth'/><category term='TDD'/><category term='unit test'/><category term='git'/><category term='Rails 2.3'/><category term='test framework'/><category term='EC2'/><category term='Rails Migration'/><category term='mod_setenvif'/><category term='Google Map API'/><category term='Heroku'/><category term='LAMP'/><category term='jQuery'/><category term='rating'/><category term='Migration Scripts'/><category term='rails3'/><category term='Ruby On Rails'/><category term='ActionView'/><category term='apache output filter'/><category term='rvm'/><category term='gems'/><category term='sed command'/><category term='Open Source'/><category term='PHP'/><category term='Rails Installtion'/><category term='Rails framework'/><category term='Joomla'/><category term='web2.0'/><category term='nofollow'/><category term='Ruby'/><category term='nofollow script'/><category term='green village'/><category term='radius search'/><category term='RoR'/><category term='mod_rewrite'/><category term='mod_ext_filter'/><category term='J2EE'/><category term='RDR'/><title type='text'>Face to Face with Open Source Technologies</title><subtitle type='html'>This is the platform I am using to share my experiences with Open Source Technologies..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-8594635683318388582</id><published>2011-05-07T03:21:00.000-07:00</published><updated>2011-05-07T03:37:18.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><category scheme='http://www.blogger.com/atom/ns#' term='test framework'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Test Driven Development with PHP</title><content type='html'>Long time I was trying to explore if there is good unit test framework in PHP and recently got opportunity to work on for one of my projects. Its Simple Test PHP Unit Test Framework.&lt;br /&gt;&lt;br /&gt;It has support for SSL, forms, frames, proxies and basic authentication. What makes Simple Test Framework immediately useful to the PHP developer is the internal web browser. This allows tests that navigate web sites, fill in forms and test pages. Being able to write these test in PHP means that it is easy to write integrated tests. An example might be confirming that a user was written to a database after a signing up through the web site.&lt;br /&gt;&lt;br /&gt;There are basically two types of Test Case:&lt;br /&gt;&lt;br /&gt;1. Unit Test Cases&lt;br /&gt;a. The UnitTestCase class will typically generate test events when run and these events are sent to an observing reporter using methods inherited from UnitTestCase.&lt;br /&gt;b. Autorun.php file does the expected work of pulling in the definitions of UnitTestCase. It collects all test classes in the current file and runs them automagically. It does this by setting up an exit handler.&lt;br /&gt;&lt;br /&gt;Code Snippet:&lt;br /&gt;&lt;script src="http://pastie.org/1874538.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Some of the Base Functions and their description:&lt;br /&gt;- assertTrue($x) Fail unless $x evaluates true&lt;br /&gt;- assertFalse($x) Fail unless $x evaluates false&lt;br /&gt;&lt;br /&gt;2. Web Test Case&lt;br /&gt;&lt;br /&gt;a. The WebTestCase includes facilities for navigation, content and cookie checks and form handling. Usage of these test cases is similar to the UnitTestCase.&lt;br /&gt;b. Inorder to run test cases as part of a group, in this scenarion we use group testing. The test cases should really be placed in files without the runner code.&lt;br /&gt;c. The setUp() method is run just before each and every test method.&lt;br /&gt;d. The tearDown() is run just after each and every test method.&lt;br /&gt;e. The name of the test case function is always prefixed by the word test. eg. if the test case is checklogin then you will require to&lt;br /&gt;define the function as testchecklogin.    &lt;br /&gt;Code Snippet:&lt;br /&gt;# For checking the response code of a URL&lt;br /&gt;File: lastcraft_test.php&lt;br /&gt;&lt;script src="http://pastie.org/1874544.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;File: runlastcraft_test.php&lt;br /&gt;&lt;script src="http://pastie.org/1874546.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;# For checking the login functionallity&lt;br /&gt;&lt;script src="http://pastie.org/1874548.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Some of the Base Functions and their description:&lt;br /&gt;- getUrl() =&amp;gt; The current location&lt;br /&gt;- setMaximumRedirects($max) =&amp;gt; Stop after this many redirects&lt;br /&gt;- assertResponse($codes) =&amp;gt; Pass if HTTP response matches this list&lt;br /&gt;- assertField($name, $value) =&amp;gt; Pass if an input tag with this name has this value&lt;br /&gt;- setField($name, $value) =&amp;gt; Sets the input tag with this name with this value&lt;br /&gt;- clickSubmit($label) =&amp;gt; Click the first button with this label&lt;br /&gt;- assertText($name) =&amp;gt; Pass if matches visible and "alt" text&lt;br /&gt;- assertTitle($title) =&amp;gt; Pass if title is an exact match&lt;br /&gt;&lt;br /&gt;One can explore more on&lt;a href="http://www.simpletest.org/"&gt; Simple Test PHP Unit Testing Framework&lt;/a&gt; Its pretty clean mechnism to follow your TDD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-8594635683318388582?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/8594635683318388582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=8594635683318388582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/8594635683318388582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/8594635683318388582'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2011/05/test-driven-development-with-php.html' title='Test Driven Development with PHP'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-3617430129498517836</id><published>2011-04-03T04:35:00.000-07:00</published><updated>2011-05-09T06:39:24.888-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KML'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Earth'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Map API'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='KeyHole Markup Language'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Earth API'/><title type='text'>Using Google Earth API and KML for your business</title><content type='html'>Although its almost 6 yrs since when Google launched its Google Map API, and I built my first app around it for entrip.com, it has been evolving lot and lots of possibilities have been created.&lt;br /&gt;A new application is result of new business requirement or introduction of new technology which can be used for solving old business problems.&lt;br /&gt;Next step of Google Map api is now Google earth API, as processing power and bandwidth is going cheaper its becoming more feasible and attactive to build apps around google earth. A browser plugin makes google earth api more killing and pervasive.&lt;br /&gt;The Google Earth Plug-in and its JavaScript API let you embed Google Earth, a true 3D digital globe, into your web pages. Using the API you can draw markers and lines, drape images over the terrain, add 3D models, or load KML files, allowing you to build sophisticated 3D map applications. The Google Earth API is a free service, available for any web site that is free to consumers.&lt;br /&gt;Google Earth provides the following functionalities that adds to the advantage of using it:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;a. Google Street View&lt;br /&gt;b. Google Aerial View&lt;br /&gt;c. Google 3D buildings&lt;br /&gt;and many more...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The main new and interesting thing google introduces is KML ( Key Hole Markup Language ).&lt;br /&gt;KML is a file format used to display geographic data in an Earth browser, such  as Google Earth, Google Maps, and Google Maps for mobile. You can create KML files to pinpoint locations, add image overlays, and expose rich data in new ways. KML is used for the following reasons:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; a. Casual users&lt;br /&gt;     Description: Placemark homes, plan and document journeys.&lt;br /&gt; b. Scientists&lt;br /&gt;     Description: See detailed mappings of natural resources and trends.&lt;br /&gt; c. Non-Profits&lt;br /&gt;      Description: Highlight problems and advocate change&lt;br /&gt; d. Students and Educators&lt;br /&gt;      Description: Explore historic and current places, people and events.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Using Above technologies just created a simple app which is just combination of&lt;br /&gt;Goggle Earth API + KML Data + PHP + MYSQL + AJAX&lt;br /&gt;&lt;br /&gt;Steps done taken are&lt;br /&gt;&lt;br /&gt;1) Develope KML to locate particular co-ordinate and mark it using graphical shapes such are ring, polygon&lt;br /&gt;&lt;br /&gt;2) Initialise the Google earth API&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;google.earth.createInstance('map3d', initCB, failureCB);&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;3) In-order to send the request to the PHP script Ajax has been implemented.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;function addcityajax()&lt;br /&gt;{  &lt;br /&gt;var data = "load=citydropdown";&lt;br /&gt;&lt;br /&gt;$.ajax({&lt;br /&gt;        url: "get_kml_data.php",&lt;br /&gt;        type: 'GET',&lt;br /&gt;        data: data,&lt;br /&gt;        success: function(data){&lt;br /&gt;//code to process kml data response&lt;br /&gt;                   }&lt;br /&gt;        });&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some useful links&lt;br /&gt;&lt;a href="http://code.google.com/apis/kml/articles/phpmysqlkml.html"&gt;Using PHP and Mysql to generate KML&lt;/a&gt;&lt;br /&gt;&lt;a href="http://earth-api-samples.googlecode.com/svn/trunk/examples/kml-fetch-interactive.html"&gt;test your KML online tool&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-3617430129498517836?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/3617430129498517836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=3617430129498517836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3617430129498517836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3617430129498517836'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2011/04/using-google-earth-api-and-kml-for-your.html' title='Using Google Earth API and KML for your business'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-3701219356983505152</id><published>2011-03-28T06:53:00.000-07:00</published><updated>2011-03-28T07:15:17.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Installtion'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveRecord'/><category scheme='http://www.blogger.com/atom/ns#' term='Heroku'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionController'/><category scheme='http://www.blogger.com/atom/ns#' term='gems'/><category scheme='http://www.blogger.com/atom/ns#' term='haml'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionView'/><category scheme='http://www.blogger.com/atom/ns#' term='Elastic Cloud Computing'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='rvm'/><category scheme='http://www.blogger.com/atom/ns#' term='DRY'/><title type='text'>Weekly Diary of a Rails Developer</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Day 1&lt;/span&gt;&lt;br /&gt;Ruby on Rails Installtion&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Rails installation and configuration&lt;br /&gt;Installing rvm for ruby versions on same system.&lt;br /&gt;Installing dependencies for rails,rvm and gems like iconv,mysql,hpricot,sqlite,nokogiri etc by using apt-get.&lt;br /&gt;Solving issues found during installation.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Day 2&lt;/span&gt;&lt;br /&gt;Model (ActiveRecord )&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Using validations like validates_presence_of, validates_uniqueness_of, validates_size_of,validates_format_of etc.&lt;br /&gt;Using association for specifying relationships in the tables using has_one,has_many, belongs_to etc.&lt;br /&gt;Using named_scope to classify and access records. Include and joins are used to access data from tables and query data.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Day 3&lt;/span&gt;&lt;br /&gt;View ( ActionView )&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Using views in html and haml files.&lt;br /&gt;Using haml  with right indentation are important as the ending tag depends on this.&lt;br /&gt;Including javascript/stylesheets in views by using the include and link  tag respectively.&lt;br /&gt;Using different types of ajax tags like link_to_function,form_remote_tag etc which is used to harness the power of javascript library.&lt;br /&gt;Using Partials we can have the same view has to retained on multiple pages. The layout file is used to specify the background of the page which is made to be used for multiple pages or for just single pages by mentioning it on the controller as layout "filename".&lt;br /&gt;Using Yield to insert contents on a particular layout.&lt;br /&gt;Using Render to show the same page again with the parameters already present in the response  while redirect is used to tranfer the response to a different function and then to a different view.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Day 4&lt;/span&gt;&lt;br /&gt;Controller ( ActionController )&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Using facility within the application that directs traffic, on the one hand querying the models for specific data, and on the other hand organizing that data (searching, sorting, massaging it) into a form that fits the needs of a given view.&lt;br /&gt;Managing the  layout in application that is to be used for the views from that controller.&lt;br /&gt;Using access specifiers like public,private for methods on the controller.&lt;br /&gt;Using filters on controller like before_filter and callbacks which are like after_create, before_save, after_save etc.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Day 5&lt;/span&gt;&lt;br /&gt;Migration Scripts&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Creating Rails migrations for creating tables , manipulating columns in it.&lt;br /&gt;For specifying its data structure. &lt;br /&gt;Creating up and down blocks for it.&lt;br /&gt;Specific migration can be run and it can also be reverted using  different migration command.&lt;br /&gt;Migration files are created when a model is created also additional migration files can be created for inserting columns to table later on.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;All Days&lt;/span&gt;&lt;br /&gt;Working on git, gems&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Using git for version management.&lt;br /&gt;Creating account on git, uploading private keys on it,&lt;br /&gt;Using git for cloning code from origin, making git repository,creating new branches, merging branches with master, pulling and pushing code from origin and to origin.&lt;br /&gt;Using gems for additional features e.g. &lt;br /&gt;seed_fu,&lt;br /&gt;paperclip,&lt;br /&gt;s3,&lt;br /&gt;authologic,&lt;br /&gt;facebooker,&lt;br /&gt;twitteroauth,&lt;br /&gt;fckeditor,&lt;br /&gt;act_as_ferret,&lt;br /&gt;will_paginate,&lt;br /&gt;rmagick,&lt;br /&gt;etc..&lt;br /&gt;Using bundler and Maintaining differnt section in gemfile for development,production and testing.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;On Weekend :) &lt;/span&gt;&lt;br /&gt;Deploying App on Cloud (Heroku) &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Using heroku for deploying application.&lt;br /&gt;Creating application according to the heroku requiremeent as on heroku we have time limit for request and response. &lt;br /&gt;Using amazon s3 for storing files as Heroku does not file storage on it. Creating rake tasks for that.&lt;br /&gt;Using gems which supports heroku.&lt;br /&gt;Using heroku commands,&lt;br /&gt;e.g heroku logs, heroku rake etc.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Philosphy that Developer lives  everyday&lt;/span&gt;&lt;br /&gt;TDD(Test Driven Developement), DRY ( Do Not Repeat Yourself)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-3701219356983505152?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/3701219356983505152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=3701219356983505152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3701219356983505152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3701219356983505152'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2011/03/weekly-diary-of-rails-developer.html' title='Weekly Diary of a Rails Developer'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-2479047671425893046</id><published>2011-03-23T08:40:00.000-07:00</published><updated>2011-03-23T08:44:08.365-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 2.3'/><category scheme='http://www.blogger.com/atom/ns#' term='rails3'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby On Rails'/><title type='text'>Rails 2 to Rails 3 Migration</title><content type='html'>Recently I got engaged with assignment to help one of my client in migrating his Rails 2 app to Rails 3. The engagement was interesting and quite demanding. I am sharing this experience which may of interest to some of you guys.&lt;br /&gt;Steps taken&lt;br /&gt;&lt;br /&gt;1) First made sure that I have rvm installed so that i can switch between ruby versions easily.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$ bash &lt; &lt;( curl http://rvm.beginrescueend.com/releases/rvm-install-head )    &lt;br /&gt;Then put the following line in .bashrc. This line loads rvm on system.  &lt;br /&gt;[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; . "$HOME/.rvm/scripts/rvm"  &lt;br /&gt;$ rvm install 1.9.2 $ rvm use 1.9.2 &lt;br /&gt;$ gem install rails --version=3.0.3 &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;2) Switch to your existing system ruby verion(in my case it was ruby 1.8.7) and start migrating your existing rails 2 project. I have taken help of rails_upgrade plugin for the same&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$ rvm system&lt;br /&gt;$ cd myproject&lt;br /&gt;$ script/plugin install git://github.com/rails/rails_upgrade.git&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;3) Once plugin installed then run rake tasks &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;   # Check your app for required upgrades&lt;br /&gt;    rake rails:upgrade:check&lt;br /&gt;    &lt;br /&gt;    # Backup your likely modified files that might be overwritten by the generator&lt;br /&gt;    rake rails:upgrade:backup&lt;br /&gt;    &lt;br /&gt;    # Generate a new route file&lt;br /&gt;    rake rails:upgrade:routes&lt;br /&gt;    &lt;br /&gt;    # Generate a Gemfile from your config.gem directives&lt;br /&gt;    rake rails:upgrade:gems&lt;br /&gt;&lt;br /&gt;    # Generate code for a new config/application.rb from your environment.rb&lt;br /&gt;    rake rails:upgrade:configuration&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;4) Now its time to go back to your backed up files and pick up your application specific code and put it in upgraded files&lt;br /&gt;5) Now switch to rails 3 using rvm and start your app&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;   $ rvm use 1.9.2&lt;br /&gt;   $ rails server&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;6) If you do not get any error then that will be surprise as you will definitely get tons of errors and its time to attack one by one&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;frequest type of error you will be sseing are&lt;br /&gt;a) gem not installed -&gt; please make sure that you have added entry in .Gemfile and used bundle install command&lt;br /&gt;b) gem version mismatch -&gt; find out verion that supports rails 3(ruby 1.9.2)&lt;br /&gt;c) some modifications in application.rb&lt;br /&gt;d) html corruption -&gt; please use html safe functions .html_safe&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;7) now you need to check each page one by one and sort out any issues.&lt;br /&gt;&lt;br /&gt;Overall its a great experience and offcourse I could do it with help of ample onlie help available on opensource communities.&lt;br /&gt;I will like you not to miss following links&lt;br /&gt;&lt;a href="https://github.com/rails/rails_upgrade"&gt;rails upgrate plugin&lt;/a&gt;&lt;br /&gt;&lt;a href="http://railscasts.com/episodes/225-upgrading-to-rails-3-part-1"&gt;rails cast on rails 3 migration&lt;/a&gt;&lt;br /&gt;&lt;a href="http://railscasts.com/episodes/231-routing-walkthrough"&gt;rails cast on rails 3 routing&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-2479047671425893046?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/2479047671425893046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=2479047671425893046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/2479047671425893046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/2479047671425893046'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2011/03/rails-2-to-rails-3-migration.html' title='Rails 2 to Rails 3 Migration'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-1660433532165721074</id><published>2009-06-28T04:29:00.000-07:00</published><updated>2009-06-28T04:51:04.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='radius search'/><category scheme='http://www.blogger.com/atom/ns#' term='LAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='rating'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_rewrite'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='Joomla'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='green village'/><title type='text'>Engaging web2.0 to go greener</title><content type='html'>LAMP Technology  + a simple logic for radius search + thinking in web2.0 way for greener life = thevillagegreener.com &lt;br /&gt;I am really happy the way people behind it made it a platform to fuel a greener lifestyle. I am proud to be part of the team and could help to realize the thoughts on technology front.&lt;br /&gt;The Village Greener aims to help you find and fuel your greener lifestyle by equipping you with intelligence and opportunities for action. The Village Greener encourages those interested in making ecologically sound daily lifestyle choices to gather here — and then to share, learn and do things to live a little greener. Everyday. In small ways that add up to big change.&lt;br /&gt;One may see features like rating a listing, calendar events, a website blog, having teasers for people through media like books, videos. But blending the same to give a very simple and intuitive platform for users who want to propogate their green lifestyle is unique.&lt;br /&gt;The most important thing in the site was navigability and search.&lt;br /&gt;Enabling users to search their product nearest to them, "local" to them. Knowing more about a service provider who is also providing service in other locations.&lt;br /&gt;Technologies chosen to shape up the things&lt;br /&gt;1) mod_rewrite for enabling SEF urls&lt;br /&gt;2) Joomla 1.5 to act as backend CMS&lt;br /&gt;3) SOBI Radius search plugin with many customisations for ZIP search&lt;br /&gt;4) Rating component&lt;br /&gt;5) Events and Calendar component to publish event&lt;br /&gt;6) Javascript gadgets for video sharing&lt;br /&gt;&lt;br /&gt;The beta to be released soon and will write more once its open.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-1660433532165721074?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/1660433532165721074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=1660433532165721074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/1660433532165721074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/1660433532165721074'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/06/engaging-web20-to-go-greener.html' title='Engaging web2.0 to go greener'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-3082428111326296026</id><published>2009-06-03T00:19:00.000-07:00</published><updated>2009-06-03T00:26:07.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RDR'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails Dynamic Routes'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 2.3'/><category scheme='http://www.blogger.com/atom/ns#' term='DRY'/><title type='text'>New release of RDR</title><content type='html'>As came new rails 2.3 with more n more new  stuff and making your app more DRY ( Do not Repeat Yourself) I have gone ahead and released new RDR Rails Dynamic Routes for rails 2.3.&lt;br /&gt;The new release RDR2_3_2 is implemented in Rails 2.3.2 and compatible with Rails 2.2.x and above. I made some changes in new release like create actions with web-service support. for this I have used "respond_to" feature of Action Controller which determines the desired response format(html/xml) from the HTTP Accept header submitted by the client.&lt;br /&gt;&lt;br /&gt;Hopefully you will like it..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-3082428111326296026?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/3082428111326296026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=3082428111326296026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3082428111326296026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/3082428111326296026'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/06/new-release-of-rdr.html' title='New release of RDR'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-5193017511307919266</id><published>2009-05-29T00:13:00.000-07:00</published><updated>2009-06-03T00:24:16.769-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RoR'/><category scheme='http://www.blogger.com/atom/ns#' term='RDR'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails Dynamic Routes'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby On Rails'/><title type='text'>RDR : Rails Dynamic Routes</title><content type='html'>While working on a CMS project we came across with requirement to build SEF urls dynamically in rails. rails have out-of-the-box support for SEF urls having routes.rb.&lt;br /&gt;But what if I need to add new SEF urls without restarting server.. dynamically.&lt;br /&gt;This need gave birth to RDR &lt;a href="http://rdr.rubyforge.org/" target="_blank"&gt;Rails Dynamic Routes&lt;/a&gt;. This is pretty simple utility that I have share on rubyforge. This will enable you to define customised(user friendly) url mapping for your selected controller/action making rails' routes.rb dynamic. No need to have server restart new url mapping is loaded dynamically. No additional dependency of any gems. You can also keep track of new updates on &lt;a href="http://rubyforge.org/projects/rdr" target="_blank"&gt;Rubyforge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-5193017511307919266?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/5193017511307919266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=5193017511307919266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/5193017511307919266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/5193017511307919266'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/05/rdr-rails-dynamic-routes.html' title='RDR : Rails Dynamic Routes'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-566213894564408047</id><published>2009-05-23T01:18:00.000-07:00</published><updated>2009-05-24T06:32:31.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Elastic Cloud Computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon S3'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><title type='text'>Evaluating Amazon EC2 for a new startup</title><content type='html'>Recently I got involved in shaping up a new job portal site. While architecting the application I was sure that it will be best to go for Amazon S3(Simple Storage Service) for storing my unstructured data in forms of pdf, word-docs, ppts. When I started thinking upon deployment options I started digging into &lt;a href="http://aws.amazon.com/ec2/" target="_blank"&gt;Amazon EC2&lt;/a&gt; . This was some interesting thing that I want share about..&lt;br /&gt;We were very clear about our plan. The steps till final release we defined were 1) nightly build release 2) alpha release 3) beta release&lt;br /&gt;&lt;br /&gt;Nightly build release is just for developers and testers. alpha release is going to be accessed by some real market users ( a trial access invitations being sent to few top recruiters in US market) and once its accepted by industry then beta release with some marketing. Plan was to have 500 odd recruiters and 5000~6000 candidates in first 3~4 months, which was very modest. But We wanted to keep the application scalable and our deployment architecture such that we can go and keep adding city after city ..Boston..Chicago..NewYork..and so on.. the way  craigslist done !&lt;br /&gt;&lt;br /&gt;After so much of buzz of "&lt;a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank"&gt;cloud computing&lt;/a&gt;" ,  adding up of Elastic term by Amazon I seriously started looking for it.. claims are really promising.. you are paying only for what you are using and you can scale it factor-n without any hassle and very rapidly.&lt;br /&gt;&lt;br /&gt;Big question for us was whether to go for EC2 service from day one? Will it be cost effective from day one?&lt;br /&gt;&lt;br /&gt;I started searching answer for these questions..  I revisited &lt;a href="http://aws.amazon.com/ec2/#pricing" target="_blank"&gt;pricing&lt;/a&gt; of Amazon EC2.&lt;br /&gt;&lt;p&gt;The pricing below is based on data transferred "in" and "out" of Amazon &lt;span class="caps"&gt;EC2&lt;/span&gt;.&lt;/p&gt;      &lt;table class="tan-table" style="width: 350px;" width="350" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr bgcolor="#eeeecc"&gt;     &lt;td style="border-left: 1px solid rgb(238, 238, 204);" width="250"&gt;Data Transfer In&lt;/td&gt;     &lt;td style="border-right: 1px solid rgb(238, 238, 204);" width="100"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td style="border-left: 1px solid rgb(238, 238, 204);"&gt;All Data Transfer &lt;/td&gt;     &lt;td style="border-right: 1px solid rgb(238, 238, 204);" width="100"&gt;$0.10 per GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;So I am going to pay $0.10 for every GB starting from my first byte. When I requested for some quotes from hosting service provider for dedicated server , I got response with quotes ranging from 5$ to 75$ per month with 1500 GB bandwidth included.&lt;br /&gt;It was appearant that if my bandwidth usage is going to be above 500 GB but below 1500 GB then dedicated server is the best bargain for me.. but the day I start consuming more than 1500 GB bandwidth amazon Ec2 would turn me cheaper and also very scalable solution..&lt;br /&gt;&lt;br /&gt;Decision was obvious start with a dedicated server and switch to EC2 when you are real candidate for it.. when you really are a growing and scaling application.&lt;br /&gt;&lt;br /&gt;So take a pill only when you require it and if you require it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-566213894564408047?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/566213894564408047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=566213894564408047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/566213894564408047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/566213894564408047'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/05/evaluating-amazon-ec2-for-new-startup.html' title='Evaluating Amazon EC2 for a new startup'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-6167513704523390325</id><published>2009-05-18T03:09:00.000-07:00</published><updated>2009-05-26T09:53:30.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nofollow'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_ext_filter'/><category scheme='http://www.blogger.com/atom/ns#' term='nofollow script'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='apache output filter'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_setenvif'/><category scheme='http://www.blogger.com/atom/ns#' term='sed command'/><title type='text'>Nofollow script for SEO experts</title><content type='html'>After requested again and again from my SEO expert colleagues, I thought its high time to device something very basic but good tool fir my friends.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Nofollow" target="_blank"&gt;nofollow&lt;/a&gt; is an HTML attribute value used to instruct some search engines that a hyperlink should not influence the link target's ranking in the search engine's index. SEO experts want to build links for their pages and get their page ranked up high on yahoo/google/msn search engines.&lt;br /&gt;you will get exact idea about how different search engine treats "nofollow" tag from following chart&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;rel="nofollow" Action&lt;/th&gt; &lt;th&gt;Google&lt;/th&gt; &lt;th&gt;Yahoo!&lt;/th&gt; &lt;th&gt;MSN Search&lt;/th&gt; &lt;th&gt;Ask.com&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Follows the link&lt;/th&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Indexes the "linked to" page&lt;/th&gt; &lt;td&gt;No&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;No&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Shows the existence of the link&lt;/th&gt; &lt;td&gt;Only for a previously indexed page&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;In &lt;a href="http://en.wikipedia.org/wiki/SERP" title="SERP" class="mw-redirect"&gt;SERPs&lt;/a&gt; for anchor text&lt;/th&gt; &lt;td&gt;Only for a previously indexed page&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt; &lt;td&gt;Only for a previously indexed page&lt;/td&gt; &lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;span style="color: rgb(102, 102, 102);"&gt;courtsey : wikipedia.org&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;The demand is that when server serves html to bot it should add rel="nofollow" to all external links. Another caveat was that it should not add nofollow to links whose class is "letmefollow"&lt;br /&gt;The solution must be very easy to implement shud not require changes in existing code base php/html&lt;br /&gt;&lt;br /&gt;I had played with apache filter in my previous projects . With new APR introduced in Apache2.0 output filtering became more easy and more clean and efficient. Also most of the hosting service provide with apache 2.0 provides mod_ext_filter module enabled in their installation. I deviced a very simple apache output filter using "&lt;a href="http://en.wikipedia.org/wiki/Sed" target="_blank"&gt;sed&lt;/a&gt;" command. I had to use some advance sed options linke block, goto for this case.&lt;br /&gt;&lt;br /&gt;So basically solutions was mainly doing following things&lt;br /&gt;1) configure &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_ext_filter.html" target="_blank"&gt;mod_ext filter&lt;/a&gt;&lt;br /&gt;2) add environment variable using apache &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html" target="_blank"&gt;setenvif&lt;/a&gt; instruction&lt;br /&gt;3) enable filter only for bots "bot" in User_Agent field of http request&lt;br /&gt;&lt;br /&gt;If anybody wants me to know more on this then please contact me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-6167513704523390325?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/6167513704523390325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=6167513704523390325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/6167513704523390325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/6167513704523390325'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/05/nofollow-script-for-seo-experts.html' title='Nofollow script for SEO experts'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2930715403086733351.post-6828375823544538238</id><published>2009-05-16T00:23:00.000-07:00</published><updated>2009-05-27T01:19:26.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails framework'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Prologue</title><content type='html'>Hello firends..&lt;br /&gt;There is prologue for every story, so why dont I.. As this is story of me and Open Source . Working with Open source for last 8-9 years of my IT career it was a overwhelming experience. I still remember days   JDK1.1 was introduced and iting experience when EJB got introduced.. days when I memorized ACID properties saying A for Atomicity and C for concurrency..days when I started definining my own MVC architecture based on command design pattern . The warm welcome that we offered when  struts got introduced.&lt;br /&gt;Over the nine years thangs had been changed and lots of new things got introduced... lots of experiments been done, open source did not remain confined to Linux or J2EE. PHP came in big way.. apache evolved astonishingly. Journey to the Apache2.0 was mind blowing.. mod_rewrite, mod_proxy, mod_ext_filter, php modules, mod_cache its coming great. An then it was Ruby started very humbly but got into limelight with Rails framework. The days when I worked on ajax using XMLHTTP object and using document.getElementById to access DOM element to the days when we have jQuery and out of the box support for ajax using Rails Tags, isnt it interesting..&lt;br /&gt;&lt;br /&gt;I am going to use this blog to share all my experience with these technologies and how they moulded me as they got evolved. How I helped my clients, friends and colleagues in my this journey to bring up applications/solutions for them.&lt;br /&gt;&lt;br /&gt;I hope you will also cherish this with me.&lt;br /&gt;&lt;br /&gt;Nilesh&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2930715403086733351-6828375823544538238?l=nilesh-patkar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nilesh-patkar.blogspot.com/feeds/6828375823544538238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2930715403086733351&amp;postID=6828375823544538238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/6828375823544538238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2930715403086733351/posts/default/6828375823544538238'/><link rel='alternate' type='text/html' href='http://nilesh-patkar.blogspot.com/2009/05/prologue.html' title='Prologue'/><author><name>Nilesh Patkar</name><uri>http://www.blogger.com/profile/10669181070826815352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IduQBs3q_CU/Shj7lR4h1JI/AAAAAAAAAwY/GA_3uyF2-TQ/S220/nilesh3.jpg'/></author><thr:total>0</thr:total></entry></feed>
