<?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-6027970144068321872</id><updated>2011-09-16T17:20:02.710-07:00</updated><category term='drupal'/><category term='Recession'/><category term='Agile software development'/><category term='Ruby on rails'/><category term='filter'/><category term='views 2'/><category term='profile'/><title type='text'>In the world of  IT</title><subtitle type='html'>My experiences and views on Software development in an IT Firm</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-7356289937894349574</id><published>2011-09-16T17:19:00.000-07:00</published><updated>2011-09-16T17:20:02.742-07:00</updated><title type='text'>How to identify if a comment is a reply to a parent comment in Drupal ?</title><content type='html'>It is pretty simple, but didn't find it listed anywhere,&lt;br /&gt;&lt;br /&gt;if($comment-&amp;gt;pid ! =0 ) &lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;//This is a reply to a comment&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This will come in handy if you want to format a comment reply differently from a parent comment. eg - I had to hide the subject lines in comment replies to avoid too much chatter on the page. However the parent comment was still to have a subject line and hence I could not use the Drupal setting of disabling 'Subject on Comment' under the comment settings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I now do capture the auto comment titles generated by Drupal on the comment replies but do not show them as in most of the cases, it is redundant with the comment reply.&lt;br /&gt;&lt;br /&gt;Hope this will help developers looking for it and save some time !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-7356289937894349574?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/7356289937894349574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=7356289937894349574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7356289937894349574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7356289937894349574'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2011/09/how-to-identify-if-comment-in-reply-in.html' title='How to identify if a comment is a reply to a parent comment in Drupal ?'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-4412776168753264287</id><published>2011-09-16T13:09:00.000-07:00</published><updated>2011-09-16T13:09:42.136-07:00</updated><title type='text'>Book Review - How to have kick ass ideas ?</title><content type='html'>How to have kick ass ideas ? is written by Chris Barez Brown. The book is a wonderful read for people bored of their routine life and people who are just passing their life, unable to enjoy every moment.&lt;br /&gt;Chris mentions a few examples like - Do you have those Monday blues ?,&amp;nbsp; Do you feel like life has come to a standstill ?,&amp;nbsp; Do you wish weekends were longer ? are so common amongst all of us.&lt;br /&gt;&lt;br /&gt;I have seen them regularly on my facebook and twitter updates. People are so stuck in their lives without even realizing. The book is a recommended read for them.&lt;br /&gt;&lt;br /&gt;Whoever said that children books are more of pictures and less of matter, I read novels which have endless text. This was a great book with its crisp paper quality and lot of imagery. The presentation strikes right into your heart and mind.&lt;br /&gt;&lt;br /&gt;It is well organized with the initial chapters identifying the problem and making you realize what you are unable to fathom. The rest of the chapters work through solutions, methodology and&amp;nbsp; a lot of examples. &lt;br /&gt;&lt;br /&gt;Chris explains his story in the first chapter and engages you in his journey of self discovery and change. Then on, you want to listen to how he found his interest, how he changed his life and also the other real life examples.&lt;br /&gt;&lt;br /&gt;I would give the book a 4/5 and is a quick read for all the 30 something nearing mid-life crisis folks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-4412776168753264287?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/4412776168753264287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=4412776168753264287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4412776168753264287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4412776168753264287'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2011/09/book-review-how-to-have-kick-ass-ideas.html' title='Book Review - How to have kick ass ideas ?'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-7068470996057275490</id><published>2011-06-23T14:48:00.000-07:00</published><updated>2011-06-23T14:48:53.774-07:00</updated><title type='text'>Vision for your website</title><content type='html'>While owning a website, it is very important that the product owner has a vision for his product ! If the product owner is of the kind who very frequently changes the design of the site, it annoys the team.&lt;br /&gt;Under the influence of the social networks and a flurry of information coming your way everyday (thanks to the internet and the information sharing tools), it becomes all the more important to form your vision and not alter it frequently.&lt;br /&gt;If a product owner say John is the owner of a site. John has 3 business analysts working under him helping him formulate the requirements. He has a development team working on the site. Even in the days of super fast agile and SCRUM and adaptable teams, it is important that the team gets to work on a story for sometime. John should courage and confidence in his team and let the team implement a certain feature.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;But consider this hypothetical case, John is addicted to Twitter and NYtimes.com. That is how he begins his day. When he comes to work, his mind is much used to these sites and keeps tracking all updates, functionality, usability changes, etc. When he opens his site, he now wants to have those same features there.&lt;br /&gt;&lt;br /&gt;He calls the business analysts and tells them to design a feature like twitter, feature like the news widget, and so on. This design based on other sites is killing creativity. Also, the dev team who was working on certain features like forums now has to redo the site and make it accept only 140 characters because twitter does so.&lt;br /&gt;The team is no longer interested in building the site for John because they know that tomorrow he might want to build something like foursquare.&lt;br /&gt;&lt;br /&gt;This influence of other sites is creating a cluttered product and just too much overlap between all the different tools in a organization. Probably too much of information sharing has limited a person's identifying capacity and ability to focus on a plan for sometime.&lt;br /&gt;&lt;br /&gt;At the end neither is John going to be happy with his site nor are the end users going to be able to it.&lt;br /&gt;A word of caution -&lt;br /&gt;Carry an exercise to create a vision for your product for atleast the next 5 months and stick to it. Believe yourself and do not alter it under the influence of other sites / products hastily.&lt;br /&gt;&lt;br /&gt;Let the mind be focused and learn to stay focused...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-7068470996057275490?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/7068470996057275490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=7068470996057275490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7068470996057275490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7068470996057275490'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2011/06/vision-for-your-website.html' title='Vision for your website'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-4107577689776295223</id><published>2010-12-05T16:51:00.000-08:00</published><updated>2010-12-05T16:51:52.485-08:00</updated><title type='text'>Rules vs Drupal action-triggers</title><content type='html'>Today I came across a strange issue in my app. I am using Drupal 6.19, Apache 2.2, PHP 5.2&lt;br /&gt;&lt;br /&gt;Scenario 1:&amp;nbsp; Standard Drupal install with trigger module enabled.&lt;br /&gt;I had&amp;nbsp; a custom action defined as below:&lt;br /&gt;function mymdule_rules_action_info(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info[mymodule_updateUserInfo] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'type' =&amp;gt; 'user',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'description' =&amp;gt; t('Change user role'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'configurable' =&amp;gt; FALSE,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'hooks' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'user' =&amp;gt; array('insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $info;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;function mymodule_updateUserInfo(&amp;amp;$object,$context= array()) {&lt;br /&gt;//Check conditions here and add a specific role to the user.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I then saw my action listed under the admin &amp;gt; site configuration &amp;gt; actions page.&lt;br /&gt;&lt;br /&gt;I set a trigger on the event of 'User has been created'&amp;nbsp; to run the above action of&amp;nbsp; 'Change user role'.&lt;br /&gt;&lt;br /&gt;So when a new user was added to the site, this trigger was evaluated and the role of the user changed as applicable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Scenario 2:&amp;nbsp; Trigger + Rules 6.2.x&lt;br /&gt;On setting up the rules module and using it for some other content based event - triggers, the above action stopped working.&lt;br /&gt;What I noticed was that some other user saving hook was overriding the custom action and resetting the user roles to empty.&lt;br /&gt;I tried using rules module to execute the above custom action on the user has been created event, but that did not help.&lt;br /&gt;&lt;br /&gt;Solution: I changed the above action to run on the User has logged In event and that seemed to work. Now there is a overhead that this rule will be executed everytime a user logs in.&lt;br /&gt;Not sure if the rules module event of User has been created does not function correctly.&lt;br /&gt;&lt;br /&gt;Advantage of rules : More configuration and no customization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-4107577689776295223?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/4107577689776295223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=4107577689776295223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4107577689776295223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4107577689776295223'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/12/rules-vs-drupal-action-triggers.html' title='Rules vs Drupal action-triggers'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-8982314840723456236</id><published>2010-11-30T16:30:00.000-08:00</published><updated>2010-11-30T16:30:09.431-08:00</updated><title type='text'>Drupal plugin for eclipse</title><content type='html'>Looks very promising. I have started using it and looks great. I would love to have a unit test support integrated with the Drupal IDE.&lt;br /&gt;&lt;br /&gt;I am using it with Apache 2.2, PHP 5.2 and eclipse helios.&lt;br /&gt;&lt;br /&gt;Discussion : http://groups.drupal.org/node/39938&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-8982314840723456236?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/8982314840723456236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=8982314840723456236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8982314840723456236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8982314840723456236'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/11/drupal-plugin-for-eclipse.html' title='Drupal plugin for eclipse'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-6747952048406516336</id><published>2010-11-20T15:42:00.000-08:00</published><updated>2010-11-20T15:42:41.141-08:00</updated><title type='text'>Testing is the key</title><content type='html'>In one of my projects, we are having a tough time ramping up the team for Drupal. Drupal is mainly about :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;modules&lt;/li&gt;&lt;li&gt;hooks&lt;/li&gt;&lt;li&gt;themes&lt;/li&gt;&lt;li&gt;templates&lt;/li&gt;&lt;li&gt;overriding over overwriting&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We have had the team undergo:&lt;br /&gt;A week long in person training on Drupal. This comprised from basic Drupal architecture, evaluation of modules, themes&amp;nbsp; to advanced topics like crerating modules, customizing modules, templates and overriding functionality.&lt;br /&gt;&lt;br /&gt;The team is still not confident about facing a problem or feature and building a solution. Tthe management now needs to think about how to tackle the situation and bring the team upto speed and ensure that a quality solution is delivered now and everytime.&lt;br /&gt;&lt;br /&gt;As a technical analyst and a Drupal developer, I am trying to understand, why is the team taking so long and while the team is still learning to come up to a benchmark, how do we ensure the quality of what the team is working on.&lt;br /&gt;&lt;br /&gt;A few options that crossed my mind :&lt;br /&gt;Have a senior developer on the team work closely with the team (unfortunately no budget) &lt;br /&gt;Have a mixed team of 1 senior developer and 1 junior developer (unfortunately no such developer is available)&lt;br /&gt;Have a dedicated person to test the changes thoroughly (since this is a support project and with no detailed functional / requirement documents, the testing team is not ready to own it)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I understand that this is more of a people issue and no one is ready to own the project and ensure quality deliverable. I now think that had the project had tons of unit tests, developers, testers and customers would have been at peace right now.&lt;br /&gt;&lt;br /&gt;Unit tests are a key to a project with not many documents, worked upon by new developers.&amp;nbsp; Drupal does not have many unit tests with the modules and TDD with Drupal is not so straight forward.&lt;br /&gt;&lt;br /&gt;I will post my experience with unit tests or automation tests and Drupal more in the coming weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-6747952048406516336?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/6747952048406516336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=6747952048406516336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6747952048406516336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6747952048406516336'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/11/testing-is-key.html' title='Testing is the key'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-6600899121209569196</id><published>2010-10-15T16:20:00.000-07:00</published><updated>2010-10-15T16:20:11.276-07:00</updated><title type='text'>Drupal Redesign - Nice !</title><content type='html'>So guys, drupal.org is undergoing a redesign for sometime now. And I must say the new site is very commendable. What I liked about the site :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fresh UI&lt;/li&gt;&lt;li&gt;Easy navigation&lt;/li&gt;&lt;li&gt; Personalized dashboard comparable to elgg tool&lt;/li&gt;&lt;li&gt;Improved organization of tutorial&lt;/li&gt;&lt;li&gt;and much more&lt;/li&gt;&lt;/ul&gt;I am enjoying using the site and will report any issues to the queue.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Heres the url - http://beta.drupal.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-6600899121209569196?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/6600899121209569196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=6600899121209569196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6600899121209569196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6600899121209569196'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/10/drupal-redesign-nice.html' title='Drupal Redesign - Nice !'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-1796952138045791859</id><published>2010-07-06T21:32:00.000-07:00</published><updated>2010-07-08T04:08:34.307-07:00</updated><title type='text'>ApachesolrExtension module - Part 2</title><content type='html'>&lt;span style="color: black; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Following up on my earlier &lt;a href="http://manasivora.blogspot.com/2010/04/apachesolr-and-drupal.html"&gt;post&lt;/a&gt;, I have extended the&amp;nbsp; module for the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Current implementation - apachesolr 6.1.x&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;apachesolr_index_nodes() sends the documents in a chunk of 20 each.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;The documents are uploaded in a chunk of 20 during every cron run.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;Solution -&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="color: black; font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;I have overridden addDocuments()&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;function&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;in Drupal_Apache_Solr_Service_Extension class to not wrap the xml in &lt;add&gt; tags. Added functions to merging all the documents and wrap in a single &lt;add&gt; tag.&lt;/add&gt;&lt;/add&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;Clear the solr.xml at the start of every cron run.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;There will be a process (cron job running a shell script) that will post the xml to the Solr server for generating / updating the index after every Drupal cron run.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&amp;nbsp;I have uploaded the latest version of the module &lt;a href="http://manasi.drupalgardens.com/content/apachesolr-module-version-12"&gt;here&lt;/a&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;TODO: A better way of wrapping the xml in a single &lt;add&gt;&lt;/add&gt;&lt;/span&gt;&lt;/span&gt; tag.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Suggestion: apachesolr module should provide information of the total number of documents to be added to the index to the instance of &lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;Drupal_Apache_Solr_Service class.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;This will help to understand which is the last chunk of documents and wrap the entire xml in &lt;add&gt; tags.&lt;/add&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-1796952138045791859?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/1796952138045791859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=1796952138045791859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1796952138045791859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1796952138045791859'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/07/apachesolrextension-module-part-2.html' title='ApachesolrExtension module - Part 2'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-2428939330477845661</id><published>2010-06-22T07:15:00.000-07:00</published><updated>2010-06-22T07:15:00.709-07:00</updated><title type='text'>How much jquery is right jquery ?</title><content type='html'>I am using jquery 1.3.2 on my current project. Drupal has jquery 1.2 shipped with v 6.x. I used &lt;a href="http://drupal.org/project/jquery_update"&gt;jquery_update&lt;/a&gt; to allow me using v 1.3.2.&lt;br /&gt;This allows me to use a host of plugins in jquery UI, tablesorter etc.&lt;br /&gt;&lt;br /&gt;We started using jquery for some AJAX functionality, popups and client side validations like maxlength of textarea.&lt;br /&gt;Gradually we started using it to allow us implement custom functionality with Drupal views - reset filters, mutually exclusive filters, additional sorting on Drupal columns etc&lt;br /&gt;&lt;br /&gt;Latest is to implement some exceptions on the markup for styling. I am starting to wonder how much Query is the right jQuery on a project.&lt;br /&gt;As of now, we have one file ~10 Kb. So far so good !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-2428939330477845661?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/2428939330477845661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=2428939330477845661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2428939330477845661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2428939330477845661'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/06/how-much-jquery-is-right-jquery.html' title='How much jquery is right jquery ?'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-5397407424103273947</id><published>2010-06-15T02:40:00.000-07:00</published><updated>2010-06-15T02:40:45.498-07:00</updated><title type='text'>Fast Food Nation</title><content type='html'>I recently came across this book and decided to read it. The book is written very well by Eric Schossler. It is based on how USA turned into the fast food crazy nation as they are today.&lt;br /&gt;&lt;br /&gt;Eric starts with the chapters on the history of west coast of USA. He puts a picture of the lush green farmlands, agriculture era and the orange orchards from which it&lt;br /&gt;got its name of Orange County. He then introduces you to the great McDonald brothers who used to run their restaurant business.&lt;br /&gt;They gradually moved on to expanding their business by opening more outlets with a lot of manual dependency (waiters, chefs, etc).&lt;br /&gt;The book explains the journey of McDonalds from being such a small chain to one the biggest chains in the world today.&lt;br /&gt;It is also good to know how they transformed all manual jobs into machine made and process oriented.&lt;br /&gt;How they came up with McDonalds university and recipes that the machines can run and produce the same french fries&lt;br /&gt;any place, any hour of the day any month of the year.&lt;br /&gt;&lt;br /&gt;You are then taken to the lesser known details about the McDonalds uniformity and that great burger. He touches upon lesser known industries of &lt;br /&gt;the artificial flavor industry which has sprawled on the east coast, potato packing and the meat packing industry.&lt;br /&gt;&lt;br /&gt;Your taste buds are aroused not by the flavor but by the smell of the food. Next time you see 'Artifical flavors added' or 'Contains nature identical flavors', you know where they come from.&lt;br /&gt;This is needed to maintain that uniform taste of the french fries.&lt;br /&gt;&lt;br /&gt;The most heartening out of all is the plight of those involved in the meatpacking industry. Eric shares his experiences with the meatpacking industry workers.&lt;br /&gt;This industry is brutal to not just animals but also humans involved. Its sad to see the stories of how immigrants are ready to work in bad conditions at a cheap cost and how the fast food giants are exploiting them.&lt;br /&gt;&lt;br /&gt;The book lists all the major epidemics and new pathogens like E.coli introduced by meat. These can turn out to be fatal and its sad that small children have been their victims too.&lt;br /&gt;&lt;br /&gt;A lot is happening in the fast food industry. Its not all hunky dory behind the beautiful burger story.&lt;br /&gt;&lt;br /&gt;I am glad to have read this book. I am not going to fall for any fast food. Thanks Eric for the wonderful eye opener !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-5397407424103273947?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/5397407424103273947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=5397407424103273947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5397407424103273947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5397407424103273947'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/06/fast-food-nation.html' title='Fast Food Nation'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-6520404821279250266</id><published>2010-04-16T02:05:00.000-07:00</published><updated>2010-04-16T03:19:12.796-07:00</updated><title type='text'>ApachesolrExtension module</title><content type='html'>I have completed the module and am posting &lt;a href="http://manasi.drupalgardens.com/content/apachesolr-extension-module"&gt;here&lt;/a&gt;. The module implements :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hook_install() and hook_uninstall() which register the variable apachesolr_service_class which is used by apachesolr_get_solr()&lt;/li&gt;&lt;li&gt;hook_menu() and hook_settings_form() for the update path configuration page&lt;/li&gt;&lt;li&gt;Drupal_Apache_Solr_Service_Extn.php file which contains the class that overrides _sendRawPost()&lt;/li&gt;&lt;/ul&gt;A few other findings that may help others :&lt;br /&gt;1. fopen() is not allowed on certain sites if configured. You can use file_put_contents() in that case.&lt;br /&gt;2. Make sure that the directory to which you are writing has write permissions for the Apache / web server user. This is required as Drupal writes the file during cron run.&lt;br /&gt;3. Delete the index or change some content so that   apachesolr_index_updated() is invoked. This function builds the index and a series of calls later invokes _sendRawPost()&lt;br /&gt;&lt;br /&gt;Next, my solr infrastructure team will copy over the index from the file to the solr server. Will get back with how it goes !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-6520404821279250266?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/6520404821279250266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=6520404821279250266' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6520404821279250266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6520404821279250266'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/04/apachesolrextension-module.html' title='ApachesolrExtension module'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-8755985760019879625</id><published>2010-04-15T00:12:00.000-07:00</published><updated>2010-04-15T00:26:56.078-07:00</updated><title type='text'>ApacheSolr and Drupal</title><content type='html'>I will be using &lt;a href="http://drupal.org/project/apachesolr"&gt;Apachesolr&lt;/a&gt; as a search solution for one of the Drupal based websites. Sorl is setup as the enterprise search server at my current client.&lt;br /&gt;&lt;br /&gt;Earlier, I have worked with Google Appliance as the search server.&lt;br /&gt;&lt;br /&gt;As a security requirement, the infrastructure team does not want Drupal application to write the index to the Solr server.  They want solr to write the index (in the form of xml) to be stored in a directory. There would then be a script that copies over the xml to the actual index.&lt;br /&gt;&lt;br /&gt;This allows us to have read only access to the index.&lt;br /&gt;&lt;br /&gt;Issue - apachesolr module with SolrphpClient  posts its xml to the solr server. We want to intercept the process of posting and write the index to a file at a given location.&lt;br /&gt;&lt;br /&gt;Utilities involved - apachesolr module, tomcat server, solr server, SolrPhpClient&lt;br /&gt;&lt;br /&gt;Solution - We are building a apachesolrExtension module that when enabled allows you to write the xml to a directory.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Created a class Drupal_APache_Solr_service_extn class that extends Drupal_Apache_Solr_Service.&lt;/li&gt;&lt;li&gt;Override _sendrawPost() method to write the xml index to a file rather than posting it to the solr server.&lt;/li&gt;&lt;li&gt;Used the 'apachesolr_service_class' variable to make apachesolr_get_solr() load our class.&lt;/li&gt;&lt;/ol&gt;Apachesolr is a great module that also allows writing object oriented code to Drupal. I will post the module here soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-8755985760019879625?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/8755985760019879625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=8755985760019879625' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8755985760019879625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8755985760019879625'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/04/apachesolr-and-drupal.html' title='ApacheSolr and Drupal'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-2249626164826249663</id><published>2010-04-05T23:39:00.000-07:00</published><updated>2010-04-05T23:53:00.976-07:00</updated><title type='text'>Drupal has stunningly matured !</title><content type='html'>I have been working with Drupal since 2005. I have developed websites using Drupal 4.x and now I still do with Drupal 6.16.&lt;br /&gt;Drupal is indeed a wonderful CMS and the community is that makes you join them !&lt;br /&gt;&lt;br /&gt;Back then, I had developed sites based on Web 2.0. I had to write custom modules for implementing desirable behavior for wikis, blogs.&lt;br /&gt;There was more customization involved for automating certain tasks -&lt;br /&gt;eg -&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Needed to create a wiki page on creation of a organic groups (og) based group.&lt;/li&gt;&lt;li&gt;Needed the home page to be a wiki page for all groups.&lt;/li&gt;&lt;li&gt;Multi author blogs&lt;/li&gt;&lt;li&gt;Multiple blogs per user&lt;/li&gt;&lt;li&gt;Output the data in a certain fashion..in the ages when views didnt exist!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And theming, ah ! I had to write functions in phptemplate.engine, then use the template to write out the html.&lt;br /&gt;&lt;br /&gt;Over the years Drupal has matured in the following areas :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Number of modules has grown&lt;/li&gt;&lt;li&gt;90% of my requirements today are possible with just configuring the right modules&lt;/li&gt;&lt;li&gt;Support for modules has grown&lt;/li&gt;&lt;li&gt;More hooks are available in modules&lt;/li&gt;&lt;li&gt;Theming is great with the hook_theme()&lt;/li&gt;&lt;li&gt;Support for jquery..YAY!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Drupalgardens is also an impressive site. I am exploring it and will post soon about my experiences..&lt;br /&gt;&lt;br /&gt;I recently developed a module where I used concepts from object oriented programming, PHPUnit. It was a great experience writing Drupal code and playing with Drupal hooks.&lt;br /&gt;&lt;br /&gt;All in all a commendable effort from the community !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-2249626164826249663?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/2249626164826249663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=2249626164826249663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2249626164826249663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2249626164826249663'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/04/drupal-has-stunningly-matured.html' title='Drupal has stunningly matured !'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-1090737226416378517</id><published>2010-03-05T03:19:00.001-08:00</published><updated>2010-03-05T03:20:17.958-08:00</updated><title type='text'>Drupal Garden</title><content type='html'>Impressive business model ! A new one from Acquia :&lt;br /&gt;http://www.drupalgardens.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-1090737226416378517?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/1090737226416378517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=1090737226416378517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1090737226416378517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1090737226416378517'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2010/03/drupal-garden.html' title='Drupal Garden'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-7256064764183116110</id><published>2009-10-08T17:39:00.000-07:00</published><updated>2009-10-08T20:47:56.790-07:00</updated><title type='text'>Adding validation to views</title><content type='html'>This is in continuation to my previous post. I had the view ready. the path of the view was of the form dev/%/upload.&lt;br /&gt;&lt;br /&gt;This would mean the page view could be generated with URLs of the form -&lt;br /&gt;http://&lt;base_url&gt;/dev/Sony/upload&lt;br /&gt;&lt;br /&gt;assuming that Sony is the company for which you want to find the uploads.&lt;br /&gt;&lt;br /&gt;Now, we need to validate that the user who is generating this URL actually belongs to Sony.&lt;br /&gt;&lt;br /&gt;I added those validations using PHP code snippet by clicking on arguments link as shown -&lt;br /&gt;&lt;br /&gt;&lt;/base_url&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/Ss6xcGfySOI/AAAAAAAAGwI/yngTjdFc2HU/s1600-h/1-blog2.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 193px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/Ss6xcGfySOI/AAAAAAAAGwI/yngTjdFc2HU/s320/1-blog2.bmp" alt="" id="BLOGGER_PHOTO_ID_5390440900347447522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next, go to the validation section, select the validator as PHP and enter -&lt;br /&gt;&lt;br /&gt;global $user;&lt;br /&gt;profile_load_profile($user);&lt;br /&gt;return $argument == $user-&gt;profile_company;&lt;br /&gt;&lt;br /&gt;Refer image -&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/Ss6xxRW_wSI/AAAAAAAAGwQ/4Jiv_hvJUKU/s1600-h/2-blog2.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 193px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/Ss6xxRW_wSI/AAAAAAAAGwQ/4Jiv_hvJUKU/s320/2-blog2.bmp" alt="" id="BLOGGER_PHOTO_ID_5390441264040624418" border="0" /&gt;&lt;/a&gt;You can also choose the behavior you want in case of default arguments, illegal arguments, etc&lt;br /&gt;&lt;br /&gt;Save the view. Check the preview by giving some valid and invalid arguments.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We are all set with a foolproof view definition.&lt;br /&gt;&lt;br /&gt;&lt;base_url&gt;&lt;br /&gt;&lt;br /&gt;&lt;/base_url&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-7256064764183116110?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/7256064764183116110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=7256064764183116110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7256064764183116110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7256064764183116110'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/10/adding-validation-to-views.html' title='Adding validation to views'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u0qFqkhDECw/Ss6xcGfySOI/AAAAAAAAGwI/yngTjdFc2HU/s72-c/1-blog2.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-4355812370853914221</id><published>2009-10-01T14:13:00.000-07:00</published><updated>2009-10-01T15:32:32.627-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='profile'/><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='views 2'/><title type='text'>Building views in Drupal with Profiles and Filefield cck</title><content type='html'>I have a requirement where a user has some profile fields like company name. I have some content which are papers uploaded by every user.&lt;br /&gt;I need to build a view so that a user can see technical papers of all the people who work for the same company.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This means implementing views to filter on the dynamic value of a profile attribute. There are filters on Current user, user status etc. I wanted to filter on the&lt;br /&gt;user attribute of company.&lt;br /&gt;&lt;br /&gt;What I have with me -&lt;br /&gt;I have implemented the following -&lt;br /&gt;1. Enabled profile module&lt;br /&gt;2. Added 2 fields to the user profile -&lt;br /&gt;&lt;br /&gt;* profile_job_title - which is an autocomplete textfield&lt;br /&gt;* profile_company - a select list pre populated by site admin which contains the names of the company eg - Microsoft, Google, Yahoo, etc&lt;br /&gt;&lt;br /&gt;3. Users are created by the site admin and he assigns them the property of the company to which they belong.&lt;br /&gt;4. Created a new content type 'file' which is a filefiled cck field on a node&lt;br /&gt;5. When these users log in to the site they can upload their files/ technical papers.&lt;br /&gt;&lt;br /&gt;Requirement -&lt;br /&gt;I wanted a view which said Uploaded papers of your company. This page would allow the logged in user to see all papers that are submitted by users&lt;br /&gt;belonging to the same company&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How I achieved this -&lt;br /&gt;&lt;br /&gt;1. I decided to pass the company name dynamically as a parameter to the view.&lt;br /&gt;&lt;br /&gt;2. I created a new view of the type node from Views &gt; Add -&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUrbp5XskI/AAAAAAAAGuY/5237JyvRclA/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUrbp5XskI/AAAAAAAAGuY/5237JyvRclA/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5387760283321610818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUrFy48d0I/AAAAAAAAGuQ/uDSKQkPvHb8/s1600-h/1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 192px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUrFy48d0I/AAAAAAAAGuQ/uDSKQkPvHb8/s320/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5387759907778623298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUrj--UaHI/AAAAAAAAGug/CV1rFBfHREo/s1600-h/3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 194px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUrj--UaHI/AAAAAAAAGug/CV1rFBfHREo/s320/3.JPG" alt="" id="BLOGGER_PHOTO_ID_5387760426418464882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. I selected formatting options like table type, fields to be displayed, etc&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u0qFqkhDECw/SsUrq0eTI8I/AAAAAAAAGuo/irk8hlPbXs8/s1600-h/4.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://2.bp.blogspot.com/_u0qFqkhDECw/SsUrq0eTI8I/AAAAAAAAGuo/irk8hlPbXs8/s320/4.JPG" alt="" id="BLOGGER_PHOTO_ID_5387760543858893762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUry4JaiKI/AAAAAAAAGuw/URR8-Vog8W4/s1600-h/6.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUry4JaiKI/AAAAAAAAGuw/URR8-Vog8W4/s320/6.JPG" alt="" id="BLOGGER_PHOTO_ID_5387760682283993250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsE5jqh1I/AAAAAAAAGu4/zzJkzC3A7bM/s1600-h/6.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsE5jqh1I/AAAAAAAAGu4/zzJkzC3A7bM/s320/6.JPG" alt="" id="BLOGGER_PHOTO_ID_5387760991900174162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;4. I defined a path dev/%/upload where % would be the logged in user's company name which I will be passed as an argument to the view&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUsNe9GpGI/AAAAAAAAGvA/lwB-ZKXcul0/s1600-h/7-path.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUsNe9GpGI/AAAAAAAAGvA/lwB-ZKXcul0/s320/7-path.bmp" alt="" id="BLOGGER_PHOTO_ID_5387761139377939554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Passed the argument as dev/%/upload Hence declare that profile company would be passed as an argument&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u0qFqkhDECw/SsUsUKqkfwI/AAAAAAAAGvI/uZNC6NutKaw/s1600-h/8.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://4.bp.blogspot.com/_u0qFqkhDECw/SsUsUKqkfwI/AAAAAAAAGvI/uZNC6NutKaw/s320/8.JPG" alt="" id="BLOGGER_PHOTO_ID_5387761254190579458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;6. I defined the filter for 'Profle Company field' and selected the Override option&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsaYF8mtI/AAAAAAAAGvQ/v3NgMROw0jo/s1600-h/9.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsaYF8mtI/AAAAAAAAGvQ/v3NgMROw0jo/s320/9.JPG" alt="" id="BLOGGER_PHOTO_ID_5387761360874281682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsiaWUOnI/AAAAAAAAGvY/JdWfn-ppYc4/s1600-h/10.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUsiaWUOnI/AAAAAAAAGvY/JdWfn-ppYc4/s320/10.JPG" alt="" id="BLOGGER_PHOTO_ID_5387761498918763122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUs1kJhYcI/AAAAAAAAGvg/rlr6sTsN1vM/s1600-h/11.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUs1kJhYcI/AAAAAAAAGvg/rlr6sTsN1vM/s320/11.JPG" alt="" id="BLOGGER_PHOTO_ID_5387761827966968258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. Also selected other filter on 'node type' to be file&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUs7YhySUI/AAAAAAAAGvo/iIRUJWx8zys/s1600-h/12.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://3.bp.blogspot.com/_u0qFqkhDECw/SsUs7YhySUI/AAAAAAAAGvo/iIRUJWx8zys/s320/12.JPG" alt="" id="BLOGGER_PHOTO_ID_5387761927926729026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;8. Click the Override option so that the value of this filter is picked from the argument and overrides any default.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u0qFqkhDECw/SsUtAB2gw6I/AAAAAAAAGvw/aCAPSl1RpH8/s1600-h/13.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://4.bp.blogspot.com/_u0qFqkhDECw/SsUtAB2gw6I/AAAAAAAAGvw/aCAPSl1RpH8/s320/13.JPG" alt="" id="BLOGGER_PHOTO_ID_5387762007738991522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;9. While doing this, you can continue watching the Live preview on the same page towards the bottom of the configuration form&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u0qFqkhDECw/SsUtDN7-pdI/AAAAAAAAGv4/KFIaogyH4GU/s1600-h/14.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_u0qFqkhDECw/SsUtDN7-pdI/AAAAAAAAGv4/KFIaogyH4GU/s320/14.JPG" alt="" id="BLOGGER_PHOTO_ID_5387762062522754514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. Finally select 'Page' as Display and enter an argument for the Company field. In my eg, I have added EA Sports as an argument. Click Preview. What you see is all files uploaded by users whose Company name is EA Sports. The company field shows the company name as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUtzNGJ_yI/AAAAAAAAGwA/flDuD9Bf3f8/s1600-h/15.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_u0qFqkhDECw/SsUtzNGJ_yI/AAAAAAAAGwA/flDuD9Bf3f8/s320/15.JPG" alt="" id="BLOGGER_PHOTO_ID_5387762886930726690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hope this helps ! In the next post I will show how to ensure security and add validations to the view.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-4355812370853914221?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/4355812370853914221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=4355812370853914221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4355812370853914221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4355812370853914221'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/10/building-views-in-drupal-with-profiles.html' title='Building views in Drupal with Profiles and Filefield cck'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u0qFqkhDECw/SsUrbp5XskI/AAAAAAAAGuY/5237JyvRclA/s72-c/2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-5899958967441748139</id><published>2009-10-01T14:09:00.001-07:00</published><updated>2009-10-01T14:13:17.283-07:00</updated><title type='text'>Back to Drupal 6</title><content type='html'>After a short stint with Ruby on Rails, I have moved to working on Drupal again. I am working for a telecom company who have different intranet applications and a fw external marketing sites.&lt;br /&gt;&lt;br /&gt;We are evaluating whether Drupal would be a good option to use instead of some very expensive CMS tools that they are using. So  I am creating some cool Web 2.0 feature rich interactive sites.&lt;br /&gt;I see that Drupal is the right answer for all their woes with these CMS.&lt;br /&gt;&lt;br /&gt;We are also evaluating some open source search alternatives for enterprise search - Solr, etc.&lt;br /&gt;&lt;br /&gt;Keep going Team Drupal !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-5899958967441748139?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/5899958967441748139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=5899958967441748139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5899958967441748139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5899958967441748139'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/10/back-to-drupal-6.html' title='Back to Drupal 6'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-1222325761684830392</id><published>2009-05-20T02:57:00.000-07:00</published><updated>2009-05-26T07:46:58.842-07:00</updated><title type='text'>BDD with cucumber, rspec, ruby on rails - 1st in the series - Post 1</title><content type='html'>In my latest project, I am trying my hand at BDD. I would like to write about how to get started with BDD and write test first then code along the way -&lt;br /&gt;Also, I am working in Agile SCRUM methodology which allows us to talk in terms of stories, tasks, impediments etc&lt;br /&gt;&lt;br /&gt;1. I am building a social networking site based on internal data of the organisation - similar to facebookOkay - we have a story as -&lt;br /&gt;Feature: As a user, I should be able to see [first name last name] on my profile&lt;br /&gt;Scenario: As a user, I should be able to see [first name last name] on my profile&lt;br /&gt;Given Manasi Vora is a user&lt;br /&gt;And Manasi logs in to the site&lt;br /&gt;Then Manasi should see Welcome Manasi VoraAnd Manasi should see Name: Manasi Vora&lt;br /&gt;I created a view_person_profile.feature file to list the above and other scenarios.&lt;br /&gt;&lt;br /&gt;2. I wrote a view_person_profile_steps.rb file for each of the above Given, When and Then statements&lt;br /&gt;Given /^(.*) (.*) is a user in Profiles$/ do fname, lname&lt;br /&gt;# I don't know what to write here ?? so I need a model to store the user&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;3. I now need a model to store the information of all users, which I created as -&lt;br /&gt;ruby script/generate model Person&lt;br /&gt;&lt;br /&gt;Added the required columns to the migration -&lt;br /&gt;first_name&lt;br /&gt;last_name&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;Ran the migration with rake db:migrate&lt;br /&gt;&lt;br /&gt;Time for some specs now.. I wrote specs to test if the model is created and returns the first_name and last_name&lt;br /&gt;&lt;br /&gt;4. I can now go back and complete my step in the steps.rb file -&lt;br /&gt;Given /^(.*) (.*) is a user in Profiles$/ do fname, lname&lt;br /&gt;@user[fname] = Person.find_by_first_name_and_last_name(fname,lname)&lt;br /&gt;end&lt;br /&gt;5. Next step to be implemented is about allowing the user to login&lt;br /&gt;Continued further in Post 2...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-1222325761684830392?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/1222325761684830392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=1222325761684830392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1222325761684830392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1222325761684830392'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/05/bdd-with-cucumber-rspec-ruby-on-rails.html' title='BDD with cucumber, rspec, ruby on rails - 1st in the series - Post 1'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-4392333229670768641</id><published>2009-05-19T23:00:00.000-07:00</published><updated>2009-05-19T23:04:48.154-07:00</updated><title type='text'>has_many :through on the same model</title><content type='html'>1.  I have 2 models person and secretary:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Person stores the details like, name, id, position, birthdate, etc&lt;/li&gt;&lt;li&gt;Secretary stores the mapping of person_id and secretary_id which are both foreign keys on person_id from person&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;class Person &lt; ActiveRecord::Base&lt;br /&gt;has_many :secretaries, :foreign_key =&gt; 'person_id'&lt;/p&gt;&lt;p&gt;has_one :assistant, :through =&gt; :secretaries,     :conditions =&gt; [ on the attributes of secretary model] &lt;/p&gt;&lt;p&gt; ...other details&lt;/p&gt;&lt;p&gt;end&lt;/p&gt;&lt;p&gt;&lt;br /&gt;class Secretary &lt;&gt;&lt;p&gt;belongs_to :person, :foreign_key =&gt; 'person_id' &lt;/p&gt;&lt;p&gt; belongs_to :assistant, :class_name =&gt; 'Person', :foreign_key =&gt; 'secretary_id'    &lt;/p&gt;&lt;p&gt;.  .  .  other details &lt;/p&gt;&lt;p&gt;end   &lt;/p&gt;&lt;p&gt;2. Now I want to establish the association between Person to self as  -  A person would have a scretary who in turn is a person.  Hence I have defined a new model assistant for the class Person and identified it in Secretary as  - &lt;/p&gt;&lt;p&gt;belongs_to :assistant, :class_name =&gt; 'Person', :foreign_key =&gt; 'secretary_id'  &lt;/p&gt;&lt;p&gt;3.  Defining has_many :through / has_one :through - The most important to note here is to write - has_many :secretaries, :foreign_key =&gt; 'person_id' &lt;/p&gt;&lt;p&gt;and then  &lt;/p&gt;&lt;p&gt;has_one :assistant, :through =&gt; :secretaries,     :conditions =&gt; [ on the attributes of secretary model]   &lt;/p&gt;&lt;p&gt;In my case has_one suffices since after the conditions only 1 active assistant would be returned. You cacn use has_many or has_one here.&lt;/p&gt;&lt;p&gt;4. Declare belongs_to :person, :foreign_key =&gt; 'person_id' in the Person model&lt;/p&gt;&lt;p&gt;&lt;br /&gt;And there you go !!! You are all set to enjoy the benefits of rails -Access the assistant as below  -@person.assistant - Returns the assistant as a person object &lt;/p&gt;&lt;p&gt;@person.name - Person's name&lt;/p&gt;&lt;p&gt;@person.assistant.name - His asssitant's name&lt;br /&gt;And a lot of fun .... &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-4392333229670768641?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/4392333229670768641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=4392333229670768641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4392333229670768641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/4392333229670768641'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/05/hasmany-through-on-same-model.html' title='has_many :through on the same model'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-1161398644966582038</id><published>2009-04-17T05:41:00.000-07:00</published><updated>2009-04-17T05:43:03.219-07:00</updated><title type='text'>I love phpmyadmin</title><content type='html'>for its -&lt;br /&gt;simplicity&lt;br /&gt;wonderful UI&lt;br /&gt;lightweight (runs in a browser without eating up all the memory)&lt;br /&gt;features like extended inserts, single inserts to export the result of any query in the form of insert statements&lt;br /&gt;export in all formats like csv, sql, xls&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-1161398644966582038?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/1161398644966582038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=1161398644966582038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1161398644966582038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/1161398644966582038'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/04/i-love-phpmyadmin.html' title='I love phpmyadmin'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-8720520231546477919</id><published>2009-04-16T23:15:00.001-07:00</published><updated>2009-10-01T15:34:09.609-07:00</updated><title type='text'>handling mysql bigint from ruby</title><content type='html'>http://rubyforge.org/tracker/index.php?func=detail&amp;amp;aid=24387&amp;amp;group_id=4550&amp;amp;atid=17562&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-8720520231546477919?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/8720520231546477919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=8720520231546477919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8720520231546477919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8720520231546477919'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/04/handling-mysql-bigint-from-ruby.html' title='handling mysql bigint from ruby'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-7410435269987037656</id><published>2009-04-16T23:14:00.000-07:00</published><updated>2009-05-31T07:26:31.103-07:00</updated><title type='text'>clone to the rescue</title><content type='html'>clone method in ruby&lt;br /&gt;My project had a requirement where the database table had the records of the type -&lt;br /&gt;attr1 =&gt; a&lt;&gt;b&lt;&gt;c&lt;br /&gt;attr2  =&gt; 1&lt;&gt;2&lt;&gt;3&lt;br /&gt;id =&gt; 2&lt;br /&gt;&lt;br /&gt;The data is stored in a legacy system and in a non normalized format - probably for performance :)&lt;br /&gt;or who knows why ?&lt;br /&gt;But it essentially means that a in attr1 is mapped to 1 from att2&lt;br /&gt;i.e -&lt;br /&gt;a &lt;=&gt; 1&lt;br /&gt;b &lt;=&gt; 2&lt;br /&gt;c &lt;=&gt; 3&lt;br /&gt;&lt;br /&gt;This record thus stores information of 3 records merged into a single record.&lt;br /&gt;The best way to split records is with clone function. It indeed saved my day after spending a lot of time trying to split the records or just create copies of the records...&lt;br /&gt;&lt;br /&gt;Here is what I was trying -&lt;br /&gt;model = Model.first&lt;br /&gt;o1 = model #to hold a &lt;=&gt; 1&lt;br /&gt;o2 = model #to hold b &lt;=&gt; 2&lt;br /&gt;o3 = model #to hold c &lt;=&gt; 3&lt;br /&gt;&lt;br /&gt;To my annoyance, o1,o2,o3 all referred to the same model object in memory... :)&lt;br /&gt;&lt;br /&gt;Then came clone() to help me write the following code -&lt;br /&gt;    o1 = model.clone #to hold a &lt;=&gt; 1&lt;br /&gt;o2 = model.clone #to hold b &lt;=&gt; 2&lt;br /&gt;o3 = model.clone #to hold c &lt;=&gt; 3&lt;br /&gt;&lt;br /&gt;Getting to learn about all OO fun  !!!&lt;br /&gt;Reference -&lt;br /&gt;http://www.ruby-doc.org/core/classes/Object.html#M000349&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-7410435269987037656?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/7410435269987037656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=7410435269987037656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7410435269987037656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/7410435269987037656'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/04/using-clone-method-in-ruby.html' title='clone to the rescue'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-8886591112958340930</id><published>2009-01-15T22:46:00.000-08:00</published><updated>2009-01-15T22:52:30.396-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recession'/><title type='text'>Will recession promote open source adoption ?</title><content type='html'>With all the bad news around about recession and how it has brought down so many firms, led to cost cutting in many companies,  etc I was wondering if there can be anything good to hear about in these times ?Though I am not a economist, I can be optimistic about the post recession period..&lt;br /&gt;I have come across a lot of firms aound who have started cost cutting pro actively. Suddenly everyone has started to think about luxury and necessity.Flight tickets for utmost improtant journeys have been downgraded. Journeys are avoided in the first place.For some, trains have replaced the flights.&lt;br /&gt;All this makes me think how will recession shape IT ? Will it lead to the promotion of open source software. I have seen that open source is still to make its presence feltin many sectors mainly BFSI.People don't trust open source as there is no support and people seldom feel comfortable about the community in such mission critical applications.&lt;br /&gt;Ironically these customers don't realise that most of the companies raise tiekts with the support group and keep following up at large. I have witnessed a few such instances from great database firms boasting about their support but not helping on time. The internal IT team has to then work hard to resolve these issues :)Now maybe open source will gain weightage during the choice of technology and many open source software companies can start providing paid support to kae the customer rely on these.&lt;br /&gt;Open source costs would still remain way less than the spanky costs of licensed software.&lt;br /&gt;Similar thoughts anyone  ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-8886591112958340930?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/8886591112958340930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=8886591112958340930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8886591112958340930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/8886591112958340930'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/01/will-recession-promote-open-source.html' title='Will recession promote open source adoption ?'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-2942850997516724379</id><published>2009-01-07T23:20:00.001-08:00</published><updated>2009-01-15T22:50:25.036-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on rails'/><title type='text'>Firefox, Selenium RC and proxy chaining</title><content type='html'>The way Selenium RC is designed is such that whenever it opens a browser, it creates its own proxy.pac file for the session and overwrites the proxy coonfiguration.&lt;br /&gt;This causes popups generation in Mac and timeouts in some machines which result in test failure.&lt;br /&gt;&lt;br /&gt;It was quite difficult to figure out the cause for the timeouts as I never expected Selenium to overwrite my browser proxy configuration.&lt;br /&gt;If Selenium is to overwrite this and something else what is the use of assuming that it simulates user behavior and runs acceptance tests ?&lt;br /&gt;&lt;br /&gt;A couple of more discussions about the issue -&lt;br /&gt;http://jira.openqa.org/browse/SRC-210&lt;br /&gt;http://working-thought.blogspot.com/2008/10/recent-conversation-with-colleague.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-2942850997516724379?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/2942850997516724379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=2942850997516724379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2942850997516724379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2942850997516724379'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/01/firefox-selenium-rc-and-proxy-chaining.html' title='Firefox, Selenium RC and proxy chaining'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-6421845358091409166</id><published>2009-01-07T23:11:00.001-08:00</published><updated>2009-01-15T22:50:25.036-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on rails'/><title type='text'>Vista and Rails - terribly slow</title><content type='html'>I have setup ruby on rails - ruby 1.8 and rails 2.1 on my Windows Vista PC&lt;br /&gt;The result is a terribly slow setup&lt;br /&gt;Any command from the command line like - gem install,&lt;br /&gt;rake, etc takes ages to register with the machine and start execution&lt;br /&gt;&lt;br /&gt;I am looking for what cacn be so awful with Vista and if anyone else is facing similar issues&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-6421845358091409166?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/6421845358091409166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=6421845358091409166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6421845358091409166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6421845358091409166'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/01/vista-and-rails-terribly-slow.html' title='Vista and Rails - terribly slow'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-5470421510540087868</id><published>2009-01-04T22:17:00.001-08:00</published><updated>2009-01-15T22:50:25.037-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on rails'/><title type='text'>Getting started with Ruby on Rails</title><content type='html'>After Drupal, I have now moved on to Ruby on Rails. I have started working on &lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;BDD &lt;/a&gt;using Cucumber.&lt;br /&gt;&lt;br /&gt;Initially I stumbled upon some issues with installing the gems from behind a firewall -&lt;br /&gt;Solution : http://github.com/aslakhellesoy/cucumber/wikis/ruby-on-rails&lt;br /&gt;For Windows, set the HTTP_PROXY environment variable&lt;br /&gt;&lt;br /&gt;Now I have cucumber running on my machine.&lt;br /&gt;&lt;br /&gt;We have decided to run two kinds of features -&lt;br /&gt;1. acceptance - These will be the user acceptance tests using Selenium that invoke a browser and simulate user activity on the site. They are run after a successful build&lt;br /&gt;2. functional - These are the tests that use the app ruby code (as my application is built in Ruby on Rails) and webrat which speeds up the test execution. Webrat runs internally at the server without passing actual HTML between a browser and server.&lt;br /&gt;This runs as a part of the build process whihc includes unit and integration tests. Successful test suite execution results in a deployment of the latest version of code.&lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-5470421510540087868?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/5470421510540087868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=5470421510540087868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5470421510540087868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/5470421510540087868'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2009/01/getting-started-with-ruby-on-rails.html' title='Getting started with Ruby on Rails'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-6903273163155789974</id><published>2008-11-24T20:21:00.000-08:00</published><updated>2009-01-15T22:51:22.930-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile software development'/><title type='text'>Agility needs ownership</title><content type='html'>&lt;div&gt;With most of the companies offshoring their IT work, I keep thinking about the ownership of the application. You don't want to clean someone else's house because its not yours.. Ownership is the most important factor in caring for something...&lt;/div&gt;&lt;br /&gt;&lt;div&gt;With offshoring ownership is an improtant factor to think upon.. With agile methodologies picking up, ownership further becomes more improtant.&lt;br /&gt;&lt;br /&gt;1. Agile expects you to change frequently during the project lifecycle.  You need to build the app as requested by the business owner&lt;br /&gt;2. Requirements chgange with the busines priorities&lt;br /&gt;3. With the onsite - offshore model, geographic distance leads to time lag in passing the information.&lt;br /&gt;4. Key decisions are taken at onsite with the client and communicated offshore&lt;br /&gt;5. The team engages in building the app as early as possible to gain customer delight&lt;br /&gt;&lt;br /&gt;During this it is improtant that we do not compromise on quality. Quality assurance needs to be inculcated in the team.&lt;br /&gt;&lt;br /&gt;Engineering practices should be followed that ensure quality.&lt;br /&gt;&lt;br /&gt;Above all, there should be some attachment and a sense of responsibilty towards the app.&lt;br /&gt;Though you work for the client, the developers should have a sense of ownership towards the app.&lt;br /&gt;&lt;br /&gt;All in all, to me it seems that Ownership, Communication and Quality are the three most important aspects required in the team in an agile project&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-6903273163155789974?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/6903273163155789974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=6903273163155789974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6903273163155789974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/6903273163155789974'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2008/11/agility-needs-ownership.html' title='Agility needs ownership'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-3162335601747922229</id><published>2008-11-24T20:09:00.000-08:00</published><updated>2009-01-15T22:51:50.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile software development'/><title type='text'>...and the release went well</title><content type='html'>Back again..much relieved and satisfied. The app release went really well though with some minor hiccups on the way...&lt;br /&gt;We all take porecautions and follow processes before a production release, some of my key takeaways -&lt;br /&gt;&lt;br /&gt;1. Ensure that the QA environment is EXACTLY as production&lt;br /&gt;2. Perform multiple dry runs ahead of the release&lt;br /&gt;3. Perform at least one dry run by refreshing the QA database with production data just a couple of days before the actual release&lt;br /&gt;4. Decide upon a medium (sametime, netmeeting, phone, etc) by which the team would be connected during the release&lt;br /&gt;5. Ensure that all kinds of testing (performance, resilience, coexistent, etc) are performed during development&lt;br /&gt;6. Share the results, best practices, etc with the different teams or mentors early  on during the project lifecycle for early feedback&lt;br /&gt;7. Do not try and fix the last minute bugs. Add them to your list of items with highest priority..and schedule a hotfix after the release&lt;br /&gt;8. Ensure that you have someone from the Product Owner team to test the app after the release&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-3162335601747922229?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/3162335601747922229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=3162335601747922229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/3162335601747922229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/3162335601747922229'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2008/11/and-release-went-well.html' title='...and the release went well'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6027970144068321872.post-2390145724022555955</id><published>2008-11-20T07:55:00.000-08:00</published><updated>2009-01-15T22:51:50.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile software development'/><title type='text'>Pre production release jitters</title><content type='html'>This is my first public post and would like to write about my journey till now.&lt;br /&gt;I work on a enterprise web collaboration website built on Drupal. It must be sounding as if its absolutely no big deal.. but thats not true..this website has been through a lot over the past few years.&lt;br /&gt;When we started there was just one application providing wikis, another application for blogs which was built on b2evolution..&lt;br /&gt;and multiple community sites.. all on their own databases..&lt;br /&gt;Gradually we have come to a point where we have brought all under one umberella using one database and single copy of Drupal code..&lt;br /&gt;&lt;br /&gt;The site is much more maintainable now..&lt;br /&gt;&lt;br /&gt;In the process, we have developed quite a few custom modules for drupal and improvised them...&lt;br /&gt;The latest change which we have been working on is the upgrade to Drupal 5.7 ... this is not the first release of the project .. it has had multiple major releases.. i have been through it all..&lt;br /&gt;but over this period... i have created a bonding with this app.. its my baby. i am very emotional when the site faces any issues.. and its time to move on.. i have decided to work on ruby on rails next..&lt;br /&gt;and now i have realized..that when such a bond is created.. learning has stopped somewhere..&lt;br /&gt;But, even today i am getting those pre production release jitters.. how will it all go ? will i have to rollback.?&lt;br /&gt;At the top of my head, I am very sure its all going to be fine. I have done it quite a few times and am able to control the situation...but then why the jitters.. huh&lt;br /&gt;&lt;br /&gt;I have my fingers crossed and am hoping for the best..&lt;br /&gt;&lt;br /&gt;I will post more after the release over the weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6027970144068321872-2390145724022555955?l=manasivora.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manasivora.blogspot.com/feeds/2390145724022555955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6027970144068321872&amp;postID=2390145724022555955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2390145724022555955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6027970144068321872/posts/default/2390145724022555955'/><link rel='alternate' type='text/html' href='http://manasivora.blogspot.com/2008/11/pre-production-release-jitters.html' title='Pre production release jitters'/><author><name>Manasi</name><uri>http://www.blogger.com/profile/10176331974157792031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
