<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vinsol - Leading Ruby on Rails Development and Consulting Firm in India &#187; rails</title>
	<atom:link href="http://vinsol.com/blog/category/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://vinsol.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 26 Jul 2010 08:37:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Jquery Full Calendar with Ruby on Rails</title>
		<link>http://vinsol.com/blog/2010/03/29/jquery-full-calendar-with-rails/</link>
		<comments>http://vinsol.com/blog/2010/03/29/jquery-full-calendar-with-rails/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 12:17:25 +0000</pubDate>
		<dc:creator>Akhil Bansal</dc:creator>
				<category><![CDATA[RubyonRails]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[calendar]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=834</guid>
		<description><![CDATA[Contrary to popular belief, working on a client project gives us a generous margin of creativity and explore innovative solutions. Take the example of a recent project I was working on. The client required a collaboration-based calendar module for their application similar to Google Calendar. Initially we started developing it from scratch , but then, [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/' rel='bookmark' title='Permanent Link: Ruby on Rails Caching And JavaScript Techniques'>Ruby on Rails Caching And JavaScript Techniques</a> <small>Cross posted from darthsid While implementing caching in a recent...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Contrary to popular belief, working on a client project gives us a generous margin of creativity and explore innovative solutions. Take the example of a recent project I was working on. The client required a collaboration-based calendar module for their application similar to Google Calendar. Initially we started developing it from scratch , but then, we found an awesome Jquery plugin. <br/> <br/></p>
<p>&#8220;<a href="http://arshaw.com/fullcalendar/">FullCalendar</a>&#8221; provides a full-sized, drag &amp; drop calendar. It uses AJAX to fetch events on-the-fly for each month. It also supports an intuitive interface to manage events that spans over multiple days or weeks. It is visually customizable and exposes hooks for user-triggered events (like clicking or dragging an event). <br/> <br/></p>
<p>I decided to give it a try and utilize its hooks for user triggered events within our Rails application. This small effort resulted in a barebone Rails app that might provide a good base for your project which require calendar, scheduling or appointment features.  I called it fullcalendar_rails  and it is now available on <a href="http://github.com/vinsol/fullcalendar_rails">github</a> with a working demo at <a href="http://fullcalendar.vinsol.com">http://fullcalendar.vinsol.com</a>.<br/><br/></p>
<p>Feel free to give your valuable feedback. I hope you will find this useful. <br/><br/></p>
<p><b>Update:</b> On popular demand, I have added recurring events functionality with daily, weekly and monthly frequencies. It also allows for exceptions to recurring events including delete and edit features.</p>
<p><br/><br/></p>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/' rel='bookmark' title='Permanent Link: Ruby on Rails Caching And JavaScript Techniques'>Ruby on Rails Caching And JavaScript Techniques</a> <small>Cross posted from darthsid While implementing caching in a recent...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2010/03/29/jquery-full-calendar-with-rails/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Integrating Yahoo! BOSS with your ruby on rails application</title>
		<link>http://vinsol.com/blog/2009/10/29/integrating-yahoo-boss-with-your-rails-application/</link>
		<comments>http://vinsol.com/blog/2009/10/29/integrating-yahoo-boss-with-your-rails-application/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 08:08:05 +0000</pubDate>
		<dc:creator>amit</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[yahoo boss]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=740</guid>
		<description><![CDATA[What is Yahoo! BOSS? Yahoo developer website cites it as:
&#8220;Yahoo! Search BOSS (Build your Own Search Service) is an initiative in Yahoo! Search to open up Yahoo!&#8217;s search infrastructure and enable third parties to build revolutionary search products leveraging their own data, content, technology, social graph, or other assets. This release includes Web, News, and [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/' rel='bookmark' title='Permanent Link: Ruby on Rails Caching And JavaScript Techniques'>Ruby on Rails Caching And JavaScript Techniques</a> <small>Cross posted from darthsid While implementing caching in a recent...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>What is <strong>Yahoo! BOSS</strong>? Yahoo developer website cites it as:</p>
<p style="text-align:justify"><cite>&#8220;Yahoo! Search BOSS (Build your Own Search Service) is an initiative in Yahoo! Search to open up Yahoo!&#8217;s search infrastructure and enable third parties to build revolutionary search products leveraging their own data, content, technology, social graph, or other assets. This release includes Web, News, and Image Search as well as Spelling Suggestions.&#8221;</cite></p>
<p>Some of the possible implementation of Yahoo! Boss may be finding related posts for your article, suggested tag/category for an article/query, correcting misspelled words by providing suggestions, fetching latest news on a topic dynamically, search over delicious tags, customized language search. Some of these have been tried and successfully implemented. An example is the <a href="http://www.techcrunch.com/2008/11/26/techcrunchs-new-search-engine-powered-by-yahoo-boss/">TechCrunch&#8217;s Search Engine</a>.</p>
<p> Here is a concise guide on how to use this new service in your next rails application.</p>
<p><strong>Obtain API key</strong></p>
<p>Get an application key from <a href="http://developer.yahoo.com/search/boss/">http://developer.yahoo.com/search/boss/</a>.</p>
<p><strong>Install BOSSMan Gem</strong></p>
<p>BOSSMan is a gem for interaction with the Yahoo BOSS web service written by <a href="http://github.com/jpignata">John Pignata</a>. Install it using the following commands:</p>
<pre class="brush: bash;">
gem install gemcutter
gem tumble
gem install bossman
</pre>
<p><strong>Usage</strong></p>
<p>Put this in your environment.rb</p>
<pre class="brush: ruby;">
require 'bossman'
include BOSSMan
BOSSMan.application_id = &amp;lt;Your Application ID&amp;gt;
</pre>
<p><strong>Web Search</strong></p>
<p>Use the following code to execute search over the web:</p>
<pre class="brush: ruby;">
boss = Search.web(&amp;quot;Apple Pie&amp;quot;, { :count =&amp;gt; 2, :filter =&amp;gt; &amp;quot;-hate&amp;quot; })
puts &amp;quot;Number of results: #{boss.totalhits}&amp;quot;

boss.results.each do |result|
  puts &amp;quot;#{result.title}&amp;quot;
  puts &amp;quot;#{result.dispurl}&amp;quot;
  puts &amp;quot;#{result.abstract}&amp;quot;
end

# =&amp;gt; Number of results: 2618888
# =&amp;gt; &amp;lt;b&amp;gt;Apple&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;pie&amp;lt;/b&amp;gt; - Wikipedia, the free encyclopedia
# =&amp;gt; &amp;lt;b&amp;gt;en.wikipedia.org&amp;lt;/b&amp;gt;/wiki/&amp;lt;wbr&amp;gt;&amp;lt;b&amp;gt;Apple&amp;lt;/b&amp;gt;_&amp;lt;b&amp;gt;pie&amp;lt;/b&amp;gt;
# =&amp;gt; English &amp;lt;b&amp;gt;apple&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;pie&amp;lt;/b&amp;gt; recipes go back to the time of Chaucer. &amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt; The basis of Dutch &amp;lt;b&amp;gt;apple&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;pie&amp;lt;/b&amp;gt; is a crust on the bottom and around the edges. &amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt;

boss = Search.web(&amp;quot;Moon&amp;quot;, { :count =&amp;gt; 10, :type =&amp;gt; &amp;quot;nonhtml,-pdf&amp;quot; })

boss.results.each do |result|
  puts &amp;quot;#{result.title}&amp;quot;
  puts &amp;quot;#{result.dispurl}&amp;quot;
  puts &amp;quot;#{result.abstract}&amp;quot;
end

# =&amp;gt; BACKGROUND:
# =&amp;gt; www.&amp;lt;b&amp;gt;radford.edu&amp;lt;/b&amp;gt;/~rusmart/&amp;lt;wbr&amp;gt;&amp;lt;b&amp;gt;moon&amp;lt;/b&amp;gt;.doc
# =&amp;gt; We noticed was that one of the scan lines took longer to scan the &amp;lt;b&amp;gt;moon&amp;lt;/b&amp;gt; then any other. This occurred toward the middle of the &amp;lt;b&amp;gt;moon&amp;lt;/b&amp;gt;. &amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt;

boss = Search.web(&amp;quot;Star&amp;quot;, { :sites =&amp;gt; &amp;quot;wwe.com&amp;quot;, :style=&amp;gt;'raw' })
boss.results.each do |result|
  puts &amp;quot;#{result.title}&amp;quot;
  puts &amp;quot;#{result.dispurl}&amp;quot;
  puts &amp;quot;#{result.abstract}&amp;quot;
end

# =&amp;gt; John Cena - WWE: Raw
# =&amp;gt; www.&amp;lt;b&amp;gt;wwe.com&amp;lt;/b&amp;gt;/super&amp;lt;b&amp;gt;star&amp;lt;/b&amp;gt;s/raw/&amp;lt;wbr&amp;gt;johncena
# =&amp;gt; Official profile from WWE for the professional wrestler John Cena, who has been training since he was 15. Features lots of photos and video clips, including John ...
</pre>
<p>Apart from <a href="#universal_arguments">universal arguments</a> mentioned at the end of this document, the following arguments can also be used:<br />
<script>
function toggleDiv(divid){
if(document.getElementById(divid).style.display == 'none'){
document.getElementById(divid).style.display = 'block';
}else{
document.getElementById(divid).style.display = 'none';
}
}
</script></p>
<style>
#universal_arguments td, #universal_arguments th, #web_search_arguments td, #web_search_arguments th, #web_response_fields td, #web_response_fields th, #image_search_arguments td, #image_search_arguments th, #image_response_fields th, #image_response_fields td, #news_search_arguments th, #news_search_arguments td, #news_response_fields td, #news_response_fields th{padding: 5px; vertical-align:top;}
#web_search_arguments li {list-style-type:none; background: none}
</style>
<table border="0" cellspacing="0" id="web_search_arguments">
<tbody>
<tr>
<th>Parameters</th>
<th>Values/Description</th>
</tr>
<tr>
<td><code>:filter</code></td>
<td>
Filter out adult or hate content<br />
Syntax: <code>:filter => "-hate, -porn"</code>
</td>
</tr>
<tr>
<td><code>:type</code></td>
<td>Specifies document formats (pdf, msoffice,etc)</td>
</tr>
<tr>
<td>:view</td>
<td>Syntax: <code>:view => "view1,view2"</code>, etc</p>
<p><code>:view => "keyterms"</code> will retrieve related words and phrases for each search result.</p>
<p><code>:view => "searchmonkey_feed"</code> will retrieve structured data markup, if available, for the search result in dataRSS format.</p>
<p><code>:view => "searchmonkey_rdf"</code> will retrieve structured data markup, if available, for the search result in rdf format.</p>
<p><code>:view => "delicious_toptags"</code> will retrieve the top public delicious tags for a document and the counts associated with each tag</p>
<p><code>:view => "delicious_saves"</code> will retrieve the number of times a document was saved in delicious</p>
<p><code>:view => "language"</code> identifies the language of the document</p>
</td>
</tr>
<tr>
<td>:abstract</td>
<td><code>:abstract => "long"</code> will retrieve and display an abstract of a web document up to 300 characters. This expanded abstract provides the requestor with a larger piece of information to work from in a web search query. The default for abstract is an abbreviated description.</td>
</tr>
</tbody>
</table>
<p>Click <a href="javascript:toggleDiv('web_response_fields')">here</a> to view list of response fields returned by web search.</p>
<table border="0" cellpadding="5" cellspacing="0" id="web_response_fields" style="display:none">
<tbody>
<tr>
<th>Fields</th>
<th>Details</th>
</tr>
<tr>
<td><code>count</code></td>
<td>Indicates how many results to show per page. The value shown in results is the smaller of the default or explicit “count” request argument value or the actual number of results in the response. The result set will include the requested “count” unless there are fewer than that number of matching documents.</td>
</tr>
<tr>
<td><code>totalhits</code></td>
<td>A result count that reflects no duplicates. The totalhits value is an approximation, and its value may change depending on the requested “start” and “count” values, because the approximation is adjusted as more exact result URLs are processed. A normal use for totalhits is to determine how many pages of results to offer in search result navigation. Since totalhits is an approximation, and the value may change as “start” increases on successive result pages, the result page navigation may need to be adjusted as a user browses result pages.</td>
</tr>
<tr>
<td><code>deephits</code></td>
<td>It returns an approximate count that reflects duplicate documents and all documents from a host. deephits, therefore, is invariably equal to or larger than TotalHits. The deephits value is normally used as an information display on a search result page, reporting how many total documents matched the search terms.</td>
</tr>
<tr>
<td><code>abstract</code></td>
<td>Abstract with keywords highlighted with HTML tags. abstract=long  will retrieve and display an abstract of a web document up to 300 characters. This expanded abstract provides the requester with a larger piece of information to work from in a web search query. </td>
</tr>
<tr>
<td><code>title</code></td>
<td>Title with keywords highlighted with HTML tags</td>
</tr>
<tr>
<td><code>url</code></td>
<td>URL of result</td>
</tr>
<tr>
<td><code>clickurl</code></td>
<td>Returns a navigation URL that leads to the target URL for each result. A clickurl might lead through a redirect server, which provides Yahoo! with important usage data from search result sets.</td>
</tr>
<tr>
<td><code>dispurl</code></td>
<td>Returns the URLs of documents matching the query result. Use this field only for display purposes on result pages. To direct search users to the target document, use the clickurl value</td>
</tr>
<tr>
<td><code>size</code></td>
<td>Returns the document’s size in bytes</td>
</tr>
<tr>
<td><code>date</code></td>
<td>Returns date in YYYY/MM/DD format</td>
</tr>
<tr>
<td><code>keyterms</code></td>
<td>When <code>:view => "keyterms"</code> is used in query string the keyterms section is included in the response. This includes a list of related words and phrases with the <code>term</code> subheadings.</td>
</tr>
<tr>
<td><code>searchmonkey_feed</code></td>
<td>Using this field will retrieve structured data markup, if available, for the search result in dataRSS format.</td>
</tr>
<tr>
<td><code>searchmonkey_rdf</code></td>
<td>Using this field will retrieve structured data markup, if available, for the search result in RDF format.</td>
</tr>
<tr>
<td><code>delicious_toptags</code></td>
<td>Retrieves the top public delicious tags for a document and the counts associated with each tag.</td>
</tr>
<tr>
<td><code>delicious_saves</code></td>
<td>The number of times a document was saved in delicious.</td>
</tr>
<tr>
<td><code>language</code></td>
<td>The language of the document.</td>
</tr>
</tbody>
</table>
<p><strong>Images Search</strong></p>
<p>For searching images on web, use the following code:</p>
<pre class="brush: ruby;">
boss = Search.images(&amp;quot;snow hills&amp;quot;, { :dimensions =&amp;gt; &amp;quot;large&amp;quot; })

boss.results.each do |result|
  puts &amp;quot;#{result.url}: #{result.abstract}&amp;quot;
end

# =&amp;gt; http://www.amanita-photolibrary.co.uk/photo_library/BI_habitats/gb96_chiltern_hills_from_ivinghoe_snow_std.jpg: Copyright © 2004 Chiltern hills east from near Ivinghoe snow habitats landscapes British Isles
</pre>
<p>Click <a href="javascript:toggleDiv('image_search_arguments')">here</a> for list of additional arguments that can be provided with image search. </p>
<table border="0" cellpadding="5" cellspacing="0" id="image_search_arguments" style="display:none">
<tbody>
<tr>
<th>Parameters</th>
<th>Values</th>
<th>Description</th>
</tr>
<tr>
<td><code>:filter</code></td>
<td><code>yes</code> (default) or <code>no</code></td>
<td>Whether or not to activate the Offensive Content Reduction filter. If set to yes, content marked as offensive is omitted from results.</td>
</tr>
<tr>
<td><code>:dimensions</code></td>
<td><code>all</code> (default), <code>small</code>, <code>medium</code>, <code>large</code>, <code>wallpaper</code>, <code>widewallpaper</code></td>
<td>Small images are generally thumbnail or icon sized. Medium sized images are average sized; usually not exceeding an average screen size. Large images are screen size or larger. Size pairs other than those listed are ignored.</td>
</tr>
<tr>
<td><code>:refererurl</code></td>
<td>URL, no default</td>
<td>
Search for this URL. Depending on other query restrictions, returns all image objects with this referring URL.</p>
<p>Example:  http://www.foo.com/~foo/images.htm
</td>
</tr>
<tr>
<td><code>:url</code></td>
<td>URL, no default</td>
<td>Search for this URL. Returns this exact image result.</p>
<p>Example: http://www.foo.com/~foo/images/mydog.gif
</td>
</tr>
</tbody>
</table>
<p>Click <a href="javascript:toggleDiv('image_response_fields')">here</a> to view list of response fields returned by image search.</p>
<table border="0" cellpadding="5" cellspacing="0" id="image_response_fields" style="display:none">
<tbody>
<tr>
<th>Field Name</th>
<th>Description</th>
</tr>
<tr>
<td><code>totalhits, deephits</code></td>
<td>Number of listings that match the query parameters.</td>
</tr>
<tr>
<td><code>abstract</code></td>
<td>Description of image</td>
</tr>
<tr>
<td><code>clickurl</code></td>
<td>URL to click to view image </td>
</tr>
<tr>
<td><code>filename</code></td>
<td>Filename of image</td>
</tr>
<tr>
<td><code>size</code></td>
<td>Size of image file </td>
</tr>
<tr>
<td><code>format</code></td>
<td>Format of image </td>
</tr>
<tr>
<td><code>height</code></td>
<td>Height of full-size image </td>
</tr>
<tr>
<td><code>date</code></td>
<td>Last modification date of image YYYY/MM/DD</td>
</tr>
<tr>
<td><code>mimetype</code></td>
<td>MIME type of image </td>
</tr>
<tr>
<td><code>refererclickurl</code></td>
<td>Clickable link to page in which image was found </td>
</tr>
<tr>
<td><code>refererurl</code></td>
<td>Original link to page in which image was found </td>
</tr>
<tr>
<td><code>title</code></td>
<td>Title of image (usually the filename) </td>
</tr>
<tr>
<td><code>url</code></td>
<td>URL of image itself </td>
</tr>
<tr>
<td><code>width</code></td>
<td>Width of full-size image </td>
</tr>
<tr>
<td><code>thumbnail_url</code></td>
<td>Thumbnail image</td>
</tr>
<tr>
<td><code>thumbnail_height</code></td>
<td>Thumbnail height</td>
</tr>
<tr>
<td><code>thumbnail_width</code></td>
<td>Thumbnail width</td>
</tr>
</tbody>
</table>
<p><strong>News Search</strong></p>
<p>Yahoo! BOSS also provides news search capabilties. </p>
<pre class="brush: ruby;">
boss = BOSSMan::Search.news(&amp;quot;free shipping&amp;quot;, { :age =&amp;gt; &amp;quot;1d-2w&amp;quot;, :orderby =&amp;gt; &amp;quot;date&amp;quot;, :count =&amp;gt; 1})

boss.results.each do |result|
  puts &amp;quot;#{result.title} [from #{result.source}]&amp;quot;
  puts &amp;quot;#{result.abstract}&amp;quot;
end
# =&amp;gt; Wal-Mart announces weekly price cuts for holidays [from USA Today]
# =&amp;gt; Wal-Mart said it will cut prices this holiday season for a week at a time on thousands of items, from bananas to board games. The first group of cuts hit Wednesday.
</pre>
<p>Click <a href="javascript:toggleDiv('news_search_arguments')">here</a> for list of additional arguments that can be provided with news search. </p>
<table border="0" cellpadding="5" cellspacing="0" id="news_search_arguments" style="display:none">
<tbody>
<tr>
<th>Parameters</th>
<th>Values</th>
<th>Description</th>
</tr>
<tr>
<td><code>:age</code></td>
<td><code>7d</code></td>
<td>Use age= to retrieve documents by age:<br />
<code>:age => "[value]d"</code><br />
NOTE: Maximum [value] cannot be greater than 1000.<br />
The default is 30 days, and valid values are <code>[1-30]d</code>. (News Search maintains a 30-day index.) The following example searches the full index:<br />
<code>:age => "7d"</code><br />
Age can be specified using a string made an integer and one of the letters &#8220;<code>s</code>&#8220;, &#8220;<code>m</code>&#8220;, &#8220;<code>h</code>&#8220;, &#8220;<code>d</code>&#8221; and &#8220;<code>w</code>&#8221; representing seconds, minutes, hours, days and weeks.<br />
No spaces are allowed in the string. Some examples:<br />
<code>:age => "30d"</code><br />
<code>:age => "1w"</code><br />
<code>:age => "12h"</code><br />
To specify an age range two values can be concatenated with a dash/hyphen for example:<br />
<code>:age => "5d-10d"</code> Between 5 and 10 days old<br />
<code>:age => "2w-30d"</code> Between 2 weeks and 30 days old<br />
Multiple ranges or more than one age parameter is not supported. </td>
</tr>
<tr>
<td><code>:orderby</code></td>
<td>relevance</td>
<td>To order by date add <code>:orderby => "date"</code> to the query string. Results will be returned with the most recent first. </td>
</tr>
</tbody>
</table>
<p>Click <a href="javascript:toggleDiv('news_response_fields')">here</a> to view list of response fields returned by news search.</p>
<table border="0" cellpadding="5" cellspacing="0" id="news_response_fields" style="display:none">
<tbody>
<tr>
<th>Field Name</th>
<th>Description</th>
</tr>
<tr>
<td><code>totalhits, deephits</code></td>
<td>Number of listings that match the query parameters.</td>
</tr>
<tr>
<td><code>abstract</code></td>
<td>Abstract of news story.</td>
</tr>
<tr>
<td><code>clickurl</code></td>
<td>Click this link to reach story, if present. </td>
</tr>
<tr>
<td><code>language</code></td>
<td>Language of story. </td>
</tr>
<tr>
<td><code>date</code></td>
<td>Last publication date of story. </td>
</tr>
<tr>
<td><code>time</code></td>
<td>Last publication time of story.</td>
</tr>
<tr>
<td><code>source</code></td>
<td>Source publication. </td>
</tr>
<tr>
<td><code>sourceurl</code></td>
<td>URL of source publication. </td>
</tr>
<tr>
<td><code>title</code></td>
<td>Title (or Headline) of the story. </td>
</tr>
<tr>
<td><code>url</code></td>
<td>Link to story.</td>
</tr>
</tbody>
</table>
<p><strong>Spelling Search</strong></p>
<p>Correct your misspelled words using its spelling suggestion feature:</p>
<pre class="brush: ruby;">
boss = BOSSMan::Search.spelling(&amp;quot;acknowlegment&amp;quot;)
puts boss.suggestion # =&amp;gt; acknowledgment
</pre>
<p><strong>Site Explorer</strong></p>
<p>You can also search for the pages from other sites linking into your site pages.</p>
<pre class="brush: ruby;">
links = Search.se_inlink(&amp;quot;http://mail.yahoo.com&amp;quot;, :count =&amp;gt; 2)
links.results.map { |result| p result.url }
# =&amp;gt; http://www.aol.com/
# =&amp;gt; http://groups.yahoo.com/
</pre>
<p>For displays a list of all pages belonging to a domain in the Yahoo! index, use se_pagedata method provided.</p>
<pre class="brush: ruby;">
links = Search.se_pagedata(&amp;quot;twitter.com&amp;quot;, :count =&amp;gt; 1)
links.results.map { |result| p &amp;quot;#{result.url} - #{result.abstract}&amp;quot; }
# =&amp;gt; http://twitter.com/ - Use Twitter to send status updates (tweets) through your cell phone, instant messenger, or via the Web, and notify friends and followers of the little things &amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt;
</pre>
<p><strong>Universal Arguments for Web, Images and News</strong></p>
<p>Following is the list of most commonly used arguments with web, image and news search. For more comprehensive list click <a href="http://developer.yahoo.com/search/boss/boss_guide/overview.html">here</a></p>
<table border="0" cellpadding="5" cellspacing="0" id="universal_arguments">
<tbody>
<tr>
<th>Argument</th>
<th>Options/Details</th>
</tr>
<tr>
<td><code>:start</code></td>
<td>Ordinal position of first result. First position is 0. Default sets start to 0.</td>
</tr>
<tr>
<td><code>:count</code></td>
<td>Total number of results to return. Maximum value is 50. Default sets count to 10.</td>
</tr>
<tr>
<td><code>:format</code></td>
<td>The data format of the response. Value can be set to either <code>"xml"</code> or <code>"json"</code>. Default sets format to <code>"json"</code>.</td>
</tr>
<tr>
<td><code>:callback</code></td>
<td>The name of the callback function to wrap the result. Parameter is valid only if format is set to <code>"json"</code>. No default value exists.</td>
</tr>
<tr>
<td><code>:sites</code></td>
<td>Restrict BOSS search results to a set of pre-defined sites. Multiple sites must be comma separated. Example: (<code>:sites => "abc.com,cnn.com"</code>). The Images service does not yet support multiple sites.</td>
</tr>
<tr>
<td><code>:view</code></td>
<td>Retrieve additional search data provided by the respective BOSS service. Please see individual chapters to see what view options are available.</td>
</tr>
<tr>
<td><code>:style</code></td>
<td>By default for web search result titles and abstracts contain bold HTML tags around the search term. Use <code>:style => "raw"</code> to remove the bold tags around the search terms in titles and abstracts.</td>
</tr>
</tbody>
</table>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/' rel='bookmark' title='Permanent Link: Ruby on Rails Caching And JavaScript Techniques'>Ruby on Rails Caching And JavaScript Techniques</a> <small>Cross posted from darthsid While implementing caching in a recent...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/10/29/integrating-yahoo-boss-with-your-rails-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails Caching And JavaScript Techniques</title>
		<link>http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/</link>
		<comments>http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 06:47:20 +0000</pubDate>
		<dc:creator>sid</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=704</guid>
		<description><![CDATA[Cross posted from darthsid
While implementing caching in a recent rails project I came across some typical caching issues. In a lot of pages the content is same for all users but certain components in them have user specific actions. As an example, I have a page listing all public messages that users have posted(similar to [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2010/03/29/jquery-full-calendar-with-rails/' rel='bookmark' title='Permanent Link: Jquery Full Calendar with Ruby on Rails'>Jquery Full Calendar with Ruby on Rails</a> <small>Contrary to popular belief, working on a client project gives...</small></li>
<li><a href='http://vinsol.com/blog/2009/10/29/integrating-yahoo-boss-with-your-rails-application/' rel='bookmark' title='Permanent Link: Integrating Yahoo! BOSS with your ruby on rails application'>Integrating Yahoo! BOSS with your ruby on rails application</a> <small>What is Yahoo! BOSS? Yahoo developer website cites it as:...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Cross posted from <a title="Sid's Blog" href="http://darthsid.com/blog">darthsid</a></p>
<p>While implementing caching in a recent rails project I came across some typical caching issues. In a lot of pages the content is same for all users but certain components in them have user specific actions. As an example, I have a page listing all public messages that users have posted(similar to the <a href="http://twitter.com/public_timeline">public timeline</a> in <a href="http://twitter.com">twitter</a>) but actions on those messages are user specific(eg: only owner or admin can delete a message). Also, most of these actions use ajax and the rails <a href="http://ryandaigle.com/articles/2007/9/24/what-s-new-in-edge-rails-better-cross-site-request-forging-prevention">authenticity token</a> in them also gets cached resulting in subsequent failures if the session changes. Another issue was that the timestamps in most pages is fuzzy and they become irrelevant if a page gets cached for too long. I could have created separate caches for each user but if the user base really grows managing the caches would become a nightmare and that would still not solve the authenticity token and the timestamp problem. The simplest solution was to use JavaScript, more specifically <a href="http://jquery.com">jQuery</a>.<br />
<span id="more-704"></span><br />
I have been a big fan of jQuery since I started using it about a year and a half ago and try to use it in all my projects. There is an excellent Rails plugin called <a href="http://ennerchi.com/projects/jrails">jRails</a> that replaces Prototype with jQuery and provides all the default Rails helpers for JavaScript making jQuery even more tempting to use. The examples I use below all use jQuery.</p>
<p><big><big><strong>1. Handling User Specific Components</strong></big></big></p>
<p>Taking the delete action as explained in the example above, the code in the cached view looks something like this:</p>
<pre class="brush: ruby;">
&amp;lt;% if logged_in? %&amp;gt;
&amp;lt;li class=&amp;quot;delete &amp;lt;%= 'only_' + (message.owner.login) + '_delete_allowed' %&amp;gt;&amp;quot;&amp;gt;
  &amp;lt;%= link_to_remote &amp;quot;Delete&amp;quot;,
    :url =&amp;gt; user_message_path(current_user, message)
    :method =&amp;gt; :delete,
    :confirm =&amp;gt; &amp;quot;Are you sure you wish to delete this message?&amp;quot;,
    :html =&amp;gt; { :title =&amp;gt; &amp;quot;Delete Post&amp;quot; } %&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;% end %&amp;gt;
</pre>
<p>This will create an li element with class &#8220;delete&#8221; and &#8220;only_kratos_delete_allowed&#8221; if the username of the message owner is &#8220;kratos&#8221;</p>
<p>In the non-cached part of the view I have the following code:</p>
<pre class="brush: ruby;">
&amp;lt;% if logged_in? %&amp;gt;
  &amp;lt;% if current_user.is_admin? %&amp;gt;
    &amp;lt;%= javascript_tag &amp;quot;$(document).ready(function() { MessageView.removeInvalidDeteteButtons('only_#{current_user.login}_delete_allowed', 'true'); });&amp;quot; %&amp;gt;
  &amp;lt;% else %&amp;gt;
    &amp;lt;%= javascript_tag &amp;quot;$(document).ready(function() { MessageView.removeInvalidDeteteButtons('only_#{current_user.login}_delete_allowed'); });&amp;quot; %&amp;gt;
  &amp;lt;% end %&amp;gt;
&amp;lt;% end %&amp;gt;
</pre>
<p>If the current user is an admin I pass the JavaScript function an additional parameter.</p>
<p>In the application.js file I have the following code:</p>
<pre class="brush: jscript;">
var MessageView = {
  removeInvalidDeteteButtons: function(element_class, admin) {
    if (admin == undefined)
    {
      $('.delete').each(function() { if (!$(this).hasClass(element_class)) { $(this).remove(); } });
    }
  }
}
</pre>
<p>If the second parameter is passed(in the case of an admin) the function does nothing, else it iterates over all li elements with class &#8220;delete&#8221; and removes all elements that do not also have, in this case, the &#8220;only_kratos_delete_allowed&#8221; class.</p>
<p><big><big><strong>2. Handling Rails Authenticity Token</strong></big></big></p>
<p>This part describes how to take care of the authenticity token problem:</p>
<p>I added the following code to the layout:</p>
<pre class="brush: ruby;">
&amp;lt;%= javascript_tag &amp;quot;var AUTH_TOKEN = #{form_authenticity_token.inspect};&amp;quot; if protect_against_forgery? %&amp;gt;
</pre>
<p>This code creates a JavaScript variable named &#8220;AUTH_TOKEN&#8221; that contains the current authentication token. Since this section is not cached it always get the correct token.</p>
<p>Next I added the following code to application.js:</p>
<pre class="brush: jscript;">
$(document).ajaxSend(function(event, request, settings) {
  if (settings.type == 'get' || settings.type == 'GET' || typeof(AUTH_TOKEN) == &amp;quot;undefined&amp;quot;) return;
  var authTokenRegExp = /authenticity_token=\w{40}/
  settings.data = settings.data || &amp;quot;&amp;quot;;
  if (authTokenRegExp.test(settings.data))
  {
    settings.data=settings.data.replace(authTokenRegExp, &amp;quot;authenticity_token=&amp;quot; + encodeURIComponent(AUTH_TOKEN));
  }
  else
  {
    settings.data += (settings.data ? &amp;quot;&amp;amp;&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;authenticity_token=&amp;quot; + encodeURIComponent(AUTH_TOKEN);
  }
})
</pre>
<p>This code is a slight modification of the code posted <a href="http://henrik.nyh.se/2008/05/rails-authenticity-token-with-jquery">here</a>. <a href="http://docs.jquery.com/Ajax/ajaxSend">ajaxSend</a> is jQuery function that is executed before every ajax request is sent and I use it here to replace or append the authenticity token to the request, unless the request is GET or the AUTH_TOKEN variable is not defined.</p>
<p><big><big><strong>3. Handling Fuzzy Timestamps</strong></big></big></p>
<p>The code for timestamps in the cached view looks like this:</p>
<pre class="brush: ruby;">
&amp;lt;span&amp;gt;
  &amp;lt;%= process_message_body_timestamp(message) %&amp;gt;
&amp;lt;/span&amp;gt;
</pre>
<p>And the helper code is:</p>
<pre class="brush: ruby;">
def process_message_body_timestamp(message)
  link_to &amp;quot;#{message.created_at}&amp;quot;, show_message_url(message), :class =&amp;gt; &amp;quot;timestamps&amp;quot;
end
</pre>
<p>I put the following code in the layout(non-cached):</p>
<pre class="brush: ruby;">
&amp;lt;%= javascript_tag &amp;quot;$(document).ready(function() { CustomDate.datify(#{get_custom_date_arguments}) });&amp;quot; %&amp;gt;
</pre>
<p>The get_custom_date_arguments helper is defined in application helper and returns a string containing the current time arguments needed for the JavaScript function:</p>
<pre class="brush: ruby;">
def get_custom_date_arguments
  current_time = Time.zone.now
  &amp;quot;#{current_time.year},#{current_time.month-1},#{current_time.day},#{current_time.hour},#{current_time.min},#{current_time.sec}&amp;quot;
end
</pre>
<p>I put the following code in application.js:</p>
<pre class="brush: jscript;">
var CustomDate = {
  datify: function(current_utc_year,
                   current_utc_month,
                   current_utc_day,
                   current_utc_hour,
                   current_utc_minute,
                   current_utc_second) {
    $('.timestamps').each(function() {
      $(this).html(CustomDate.humane_date($(this).html(),
                                          current_utc_year,
                                          current_utc_month,
                                          current_utc_day,
                                          current_utc_hour,
                                          current_utc_minute,
                                          current_utc_second)).removeClass('timestamps')
    })
  },

  humane_date: function(date_str, current_utc_year, current_utc_month, current_utc_day, current_utc_hour, current_utc_minute, current_utc_second) {
    var time_formats = [
                        [60, 'less than a minute ago'],
                        [90, '1 minute'], // 60*1.5
                        [3600, 'minutes', 60], // 60*60, 60
                        [5400, '1 hour'], // 60*60*1.5
                        [86400, 'hours', 3600], // 60*60*24, 60*60
                        [129600, '1 day'], // 60*60*24*1.5
                        [604800, 'days', 86400], // 60*60*24*7, 60*60*24
                        [907200, '1 week'], // 60*60*24*7*1.5
                        [2628000, 'weeks', 604800], // 60*60*24*(365/12), 60*60*24*7
                        [3942000, '1 month'], // 60*60*24*(365/12)*1.5
                        [31536000, 'months', 2628000], // 60*60*24*365, 60*60*24*(365/12)
                        [47304000, '1 year'], // 60*60*24*365*1.5
                        [3153600000, 'years', 31536000], // 60*60*24*365*100, 60*60*24*365
                        [4730400000, '1 century'], // 60*60*24*365*100*1.5
                      ];

    var time = ('' + date_str).replace(/-/g,&amp;quot;/&amp;quot;).replace(/[TUTC]/g,&amp;quot; &amp;quot;),
        dt = new Date

    dt.setUTCFullYear(current_utc_year, current_utc_month, current_utc_day)
    dt.setUTCHours(current_utc_hour, current_utc_minute, current_utc_second)

    var seconds = ((dt - new Date(time) + (dt.getTimezoneOffset() * 60000)) / 1000),
        token = ' ago',
        prepend = '',
        i = 0,
        format;

    if (seconds &amp;lt; 0) {
      seconds = Math.abs(seconds);
      token = '';
      prepend = 'in ';
    }

    while (format = time_formats[i++]) {
      if (seconds &amp;lt; format[0]) {
        if (format.length == 2) {
          return (i&amp;gt;1?prepend:'') + format[1] + (i &amp;gt; 1 ? token : ''); // Conditional so we don't return Just Now Ago
        }
        else {
            return prepend + Math.round(seconds / format[2]) + ' ' + format[1] + (i &amp;gt; 1 ? token : '');
        }
      }
    }

    // overflow for centuries
    if(seconds &amp;gt; 4730400000) {
      return Math.round(seconds / 4730400000) + ' Centuries' + token;
    }

    return date_str;
  }
}
</pre>
<p>The datify function iterates over all timestamps(elements with class &#8220;timestamps&#8221;) and replaces them with fuzzy timestamps. The humane_date function(yanked from <a href="http://stackoverflow.com/questions/168924/how-to-render-contextual-difference-between-two-timestamps-in-javascript">here</a>) generates the actual fuzzy timestamps.</p>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2010/03/29/jquery-full-calendar-with-rails/' rel='bookmark' title='Permanent Link: Jquery Full Calendar with Ruby on Rails'>Jquery Full Calendar with Ruby on Rails</a> <small>Contrary to popular belief, working on a client project gives...</small></li>
<li><a href='http://vinsol.com/blog/2009/10/29/integrating-yahoo-boss-with-your-rails-application/' rel='bookmark' title='Permanent Link: Integrating Yahoo! BOSS with your ruby on rails application'>Integrating Yahoo! BOSS with your ruby on rails application</a> <small>What is Yahoo! BOSS? Yahoo developer website cites it as:...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/09/07/rails-caching-and-javascript-techniques/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Git Work Flow For Ruby on Rails Developers</title>
		<link>http://vinsol.com/blog/2009/07/24/git-work-flow-for-rails-developers/</link>
		<comments>http://vinsol.com/blog/2009/07/24/git-work-flow-for-rails-developers/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 07:32:04 +0000</pubDate>
		<dc:creator>sid</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=651</guid>
		<description><![CDATA[Cross posted from darthsid
This is my very first blog post and so I though it should be about a tool that is indispensable for me &#8211; Git. I started using git about 10 months ago and looking back I can&#8217;t imagine how I managed to get work done without it. The purpose of this post [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2010/04/01/ssl-checklist-for-rails-applications/' rel='bookmark' title='Permanent Link: SSL checklist for Ruby on Rails Applications'>SSL checklist for Ruby on Rails Applications</a> <small>Cross posted from darthsid The purpose of SSL is to...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Cross posted from <a title="Sid's Blog" href="http://darthsid.com/blog">darthsid</a></p>
<p>This is my very first blog post and so I though it should be about a tool that is indispensable for me &#8211; Git. I started using git about 10 months ago and looking back I can&#8217;t imagine how I managed to get work done without it. The purpose of this post however is not to sing git&#8217;s praises, there are lots of good articles on the web that do so much better than I ever could. Instead, I wish to share the work-flow I use on my projects. I developed this work-flow by trial and error over the months and is currently the most efficient and productive approach I can think of. If any experienced git users happen to stumble upon this post, please do provide suggestions/alternatives to help me improve my process.</p>
<p>The project I am currently working on requires me to maintain two parallel deployment branches. One is a &#8220;production branch&#8221; which is deployed on the live server and the other is a &#8220;development branch&#8221; which is deployed on a staging server. All enhancements and feature additions are done in the &#8220;development branch&#8221; and the only changes made in the &#8220;production branch&#8221; are production bug fixes that need urgent attention. Once the &#8220;development branch&#8221; is deemed stable it is merged into &#8220;production branch&#8221; and deployed.<br />
<span id="more-651"></span><br />
I&#8217;ve divided my work-flow into two parts. The first part is a generic approach which I follow in all projects, the second part is specific to the case mentioned above and discusses how I manage the two branches using git. Although I mention &#8220;Rails&#8221; in the title of this post, the work-flow I define below is not &#8220;Rails&#8221; specific and can be applied to any project where multiple deployment branches need to be maintained. I assume the reader has a basic understanding of git and is comfortable with git branches. There are lots of configuration settings in git which help you setup things like you git author name, email and colors for git commands etc. There are two I would like to mention here though:</p>
<pre class="brush: bash;">git config --global push.default &amp;quot;tracking&amp;quot;</pre>
<p>This command tells git to perform a push only to the tracked remote branch in which you are currently working.</p>
<pre class="brush: bash;">git config --global pack.threads &amp;quot;0&amp;quot;</pre>
<p>This command tells git to auto-detect the number of threads to use for packing repositories and is useful when working on a machine with more than one core.</p>
<p><big><big><strong>1. Generic Workflow</strong></big></big></p>
<p><strong>a. Start with a clean master branch.</strong></p>
<pre class="brush: bash;">
git checkout master
git pull
</pre>
<p>You now have a clean master branch. Never work directly in the master branch, instead make all changes to a local branch.</p>
<p><strong>b. Create a local branch.</strong></p>
<pre class="brush: bash;">
git branch my_local_branch
git checkout my_local_branch
</pre>
<p>or do both in one command:</p>
<pre class="brush: bash;">git checkout -b my_local_branch</pre>
<p>This creates a new local branch named &#8220;my_local_branch&#8221; and switches to it. You can now perform all changes in this branch. One good practice to follow when using git is to commit often and in small chunks. This gives you finer control on the work done and allows you to fix mistakes without losing other work. Once you are satisfied, all those smaller commits can be consolidated in a single meaningful commit.</p>
<p><strong>c. Merge with master branch.</strong></p>
<pre class="brush: bash;">
git checkout master
git pull
</pre>
<p>if new changes were pulled do the following:</p>
<pre class="brush: bash;">
git checkout my_local_branch
git rebase master
</pre>
<p>A rebase will apply the newly pulled changes in the master branch to your local branch and then apply local branch changes on top of that. This will ensure a clean merge with master. Conflicts are very common during a rebase and will need to be resolved before you can have a successful rebase. You can also pass the &#8220;-i&#8221; option to rebase to perform an interactive rebase which will alllow you to squash multiple commits into one if you so require. Once you are finished with the rebase do the following:</p>
<pre class="brush: bash;">
git checkout master
git merge my_local_branch
git push
</pre>
<p>Once you are satisfied with the push you can delete the local branch:</p>
<pre class="brush: bash;">git branch -d my_local_branch</pre>
<p><big><big><strong><br />
2. Managing Multiple Deployment Branches</strong></big></big></p>
<p>The master branch is set as the branch for production deployment and a new remote branch is created for development phase. Since I use capistrano for project deployment I set it up to have three separate tasks: &#8220;production&#8221;, &#8220;production_staging&#8221; and &#8220;development_staging&#8221;. The &#8220;production&#8221; and &#8220;production_staging&#8221; tasks use the master branch and the &#8220;development_staging&#8221; task uses the newly created remote branch. For both the remote branches you must follow the above work-flow i.e: never work directly in the branches themselves, instead create local branches to work in.</p>
<p><strong>a. Create a new remote branch.</strong></p>
<p>First create a new remote branch from our master branch:</p>
<pre class="brush: bash;">git push origin master:refs/heads/development_phase_1</pre>
<p><strong>b. Track the remote branch.</strong></p>
<p>Track the newly created remote branch:</p>
<pre class="brush: bash;">git checkout --track -b development_phase_1 origin/development_phase_1</pre>
<p>This will create a new local branch named &#8220;development_phase_1&#8243; that is tracking the remote &#8220;development_phase_1&#8243; branch. Everyone who needs to work on development branch tracks this remote &#8220;development_phase_1&#8243; branch and pushes to it. The only pushes to master branch are production fixes.</p>
<p><strong>c. Merge the development branch with the master branch.</strong></p>
<p>Once work on development branch is finished we are ready to merge the two branches:</p>
<pre class="brush: bash;">
git checkout development_phase_1
git rebase master
git checkout master
git merge development_phase_1
git push
git branch -d development_phase_1
git push origin :heads/development_phase_1
</pre>
<p>Normally a rebase is not a good idea in a remotely tracked branch but since our phase is finished and we will create a new remote branch for the next phase, I do so here. Alternatively, I could do a force push for the remote development branch and everyone working on it would need to remove and retrack it again. The second last line removes our locally tracked development branch and the last one removes it from the remote repository.</p>
<p><big><big><strong>Final Thoughts</strong></big></big></p>
<p>As I mentioned before, the above presented work-flow is not perfect by any means but it works for me. I would appreciate feedback from anyone who reads this and has some  suggestions/recommendations to help me manage my projects better.</p>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2010/04/01/ssl-checklist-for-rails-applications/' rel='bookmark' title='Permanent Link: SSL checklist for Ruby on Rails Applications'>SSL checklist for Ruby on Rails Applications</a> <small>Cross posted from darthsid The purpose of SSL is to...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/07/24/git-work-flow-for-rails-developers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to install Ruby on Rails on almost any popular Operating System?</title>
		<link>http://vinsol.com/blog/2009/03/17/how-to-install-ruby-on-rails-on-almost-any-popular-operating-system/</link>
		<comments>http://vinsol.com/blog/2009/03/17/how-to-install-ruby-on-rails-on-almost-any-popular-operating-system/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 00:05:41 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[cheat sheets]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=561</guid>
		<description><![CDATA[My friends who are starting with Rails usually ask  &#8211; how to install rails on &#8220;operating system of their choice&#8221;? And I end up searching for best tutorial for every operating system and sharing that link.  On a lazy tuesday morning, I decided to collect all the good links  and share it here.  If you [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>My friends who are starting with Rails usually ask  &#8211; how to install rails on &#8220;operating system of their choice&#8221;? And I end up searching for best tutorial for every operating system and sharing that link.  On a lazy tuesday morning, I decided to collect all the good links  and share it here.  If you think I am missing any OS or a great tutorial, suggest the link. Thanks.</p>
<p>Following the DRY (don&#8217;t repeat yourself)  principle, I am just putting the links of best tutorial (in my opinion) for every operating system.</p>
<table border="0" width="600">
<tbody>
<tr>
<td><strong>Mac <img class="alignleft" title="Mac Rails" src="http://angrys0ul.com/blog/wp-content/uploads/2008/05/rails-osx.jpg" alt="" width="350" height="183" /></strong></td>
<td>Official Rails Tutorials from Apple Developer Website &#8211; <a href="http://developer.apple.com/tools/rubyonrails.html">http://developer.apple.com/tools/rubyonrails.html</a></td>
</tr>
<tr>
<td><strong>Leopard </strong><img class="alignleft" title="leopard" src="http://www.rubyinside.com/wp-content/uploads/2007/10/leoparddisk20070611.jpg" alt="" width="184" height="212" /></td>
<td>This is one of the most comprehensive tutorial on installing rails on Mac OS X 10.5(leopard)  <a href="http://hivelogic.com/articles/2008/02/ruby-rails-leopard">http://hivelogic.com/articles/2008/02/ruby-rails-leopard</a></td>
</tr>
<tr>
<td><strong>Ubuntu </strong><img class="alignleft" title="leopard" src="http://farm1.static.flickr.com/214/504090214_99cf043c6b_m.jpg" alt="" width="228" height="212" /></td>
<td>Installing Rails on Ubuntu Fiesty Fawn <a href="http://www.urbanpuddle.com/articles/2007/05/09/install-ruby-on-rails-on-ubuntu-feisty-fawn">http://www.urbanpuddle.com/articles/2007/05/09/install-ruby-on-rails-on-ubuntu-feisty-fawn</a></td>
</tr>
<tr>
<td><strong>Vista </strong><img class="alignleft" title="leopard" src="http://www.intelliadmin.com/images/Vista%20Ultimate%20Case.gif" alt="" width="184" height="212" /></td>
<td><a href="http://www.michaelwales.com/ruby-on-rails/installing-ruby-on-rails-on-windows-vista">http://www.michaelwales.com/ruby-on-rails/installing-ruby-on-rails-on-windows-vista<br />
</a></td>
</tr>
<tr>
<td><strong> Windows XP</strong><img class="alignleft" title="leopard" src="http://www.belchfire.net/screenshots/%5B6059%5Dwin_bulldog_xp.jpg" alt="" width="251" height="212" /></td>
<td><a href="http://agilo.us/2009/03/15/rails-on-windows/">http://agilo.us/2009/03/15/rails-on-windows/<br />
</a></td>
</tr>
<tr>
<td><strong>Windows 2003</strong><img class="alignleft" title="leopard" src="http://i6.ebayimg.com/04/i/001/37/b8/080d_35.JPG" alt="" width="184" height="212" /></td>
<td><a href="http://kosmaczewski.net/2005/11/25/how-to-install-ruby-on-rails-in-windows-2003/">http://kosmaczewski.net/2005/11/25/how-to-install-ruby-on-rails-in-windows-2003/<br />
</a></td>
</tr>
<tr>
<td><strong>RedHat</strong><img class="alignleft" title="leopard" src="http://farm4.static.flickr.com/3513/3275821849_bb928126ea_m.jpg" alt="" width="249" height="212" /></td>
<td><a href="http://www.redhat.com/magazine/025nov06/features/ruby/">http://www.redhat.com/magazine/025nov06/features/ruby/<br />
</a></td>
</tr>
<tr>
<td><strong>Solaris</strong><img class="alignleft" title="leopard" src="http://farm1.static.flickr.com/155/397991466_588eaf5298_m.jpg" alt="" width="263" height="212" /></td>
<td><a href="http://www.nowastedmoves.com/2009/geekery/installing-ruby-on-rails-on-solaris-10-1008-2/ ">http://www.nowastedmoves.com/2009/geekery/installing-ruby-on-rails-on-solaris-10-1008-2/ </a></p>
<p>Also check out cskruby optimized for the Sun Solaris Platform <a href="http://cooltools.sunsource.net/coolstack/">http://cooltools.sunsource.net/coolstack/</a></td>
</tr>
<tr>
<td><strong>CentOS</strong><img class="alignleft" title="leopard" src="http://www.linuxcdmall.com/cds/centos-4.3-i386-cd-150.jpg" alt="" width="232" height="212" /></td>
<td><a href="http://www.ruby-forum.com/topic/178186">http://www.ruby-forum.com/topic/178186<br />
</a></td>
</tr>
<tr>
<td><strong>Virtual PC</strong><img class="alignleft" title="leopard" src="http://www.advancesoftware.com.au/products_big/microsoft_virtual_pc_2004.jpg" alt="" width="232" height="212" /></td>
<td><a href="http://www.grapethinking.com/installing-ubuntu-feisty-fawn-on-virtual-pc-to-run-ruby-on-rails ">http://www.grapethinking.com/installing-ubuntu-feisty-fawn-on-virtual-pc-to-run-ruby-on-rails </a></p>
<p>Yes, I know this is not a operating system</td>
</tr>
</tbody>
</table>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/03/17/how-to-install-ruby-on-rails-on-almost-any-popular-operating-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We are going to Rails Conf 2009</title>
		<link>http://vinsol.com/blog/2009/03/16/we-are-going-to-rails-conf-2009/</link>
		<comments>http://vinsol.com/blog/2009/03/16/we-are-going-to-rails-conf-2009/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 09:11:41 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[railsconf]]></category>
		<category><![CDATA[09]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=557</guid>
		<description><![CDATA[  
Yes, We are going to Rails Conf this year.  Manik, Gaurav and Rishav(subject to his getting the visa) will be attending the RailsConf 2009. Are you going to be there too? Drop us comment, an e-mail , follow Vinsol on Twitter.  Let&#8217;s get together for some ruby talk, beer and a beverage.





Related [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2010/05/21/meet-vinsol-at-railsconf-2010/' rel='bookmark' title='Permanent Link: Meet Vinsol at RailsConf 2010'>Meet Vinsol at RailsConf 2010</a> <small>Vinsol will be attending the RailsConf 2010 (June 7 –...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<h1 class="caption"><a href="http://www.railsconf.com/"> <img title="RailsConf 2009" src="http://assets.en.oreilly.com/1/event/24/rails2009_336x280.jpg" border="0" alt="RailsConf 2009" width="336" height="280" /> </a></h1>
<p class="caption">Yes, We are going to Rails Conf this year.  Manik, Gaurav and Rishav(subject to his getting the visa) will be attending the RailsConf 2009. Are you going to be there too? Drop us comment, an<a href="../../contact-us"> e-mail </a>, <a href="http://www.twitter.com/the_vinsol">follow Vinsol on Twitter</a>.  Let&#8217;s get together for some ruby talk, beer and a beverage.</p>
<p class="caption">
<p class="caption">
<p class="caption">


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2010/05/21/meet-vinsol-at-railsconf-2010/' rel='bookmark' title='Permanent Link: Meet Vinsol at RailsConf 2010'>Meet Vinsol at RailsConf 2010</a> <small>Vinsol will be attending the RailsConf 2010 (June 7 –...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/03/16/we-are-going-to-rails-conf-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Maturity Model &#8211; Let&#8217;s share Best Practices without auditors or certifications</title>
		<link>http://vinsol.com/blog/2009/02/15/open-maturity-model-lets-share-best-practices-without-auditors-or-certifications/</link>
		<comments>http://vinsol.com/blog/2009/02/15/open-maturity-model-lets-share-best-practices-without-auditors-or-certifications/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 10:27:21 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rmm]]></category>
		<category><![CDATA[omm]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://vinsol.com/?p=502</guid>
		<description><![CDATA[Nothing to do with OSMM (open source maturity model). There is some discussion  going in  rails community for  Obie Fernandez post on idea of Rails Maturity Model.
I like the basic idea behind defining some sort of maturity model for rails but I don&#8217;t think RMM or anything like that should be modeled on CMM.
After spending  [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2009/11/12/10-little-known-ways-to-find-a-ruby-on-rails-team-for-your-next-project/' rel='bookmark' title='Permanent Link: 10 little known ways to find a ruby on rails team for your next project'>10 little known ways to find a ruby on rails team for your next project</a> <small>Everytime we talk to our clients, we find that they...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Nothing to do with <a href="http://www.navicasoft.com/pages/osmm.htm">OSMM (open source maturity model). </a>There is some discussion  going in  rails community for <a href="http://blog.obiefernandez.com/content/2009/02/rails-maturity-model.html"> Obie Fernandez </a>post on <a href="http://groups.google.com/group/rails-business/browse_thread/thread/e24cfda7947fda10">idea of Rails Maturity Model.</a></p>
<p>I like the basic idea behind defining some sort of maturity model for rails but I don&#8217;t think RMM or anything like that should be modeled on CMM.</p>
<p>After spending  hours looking at views of many people regarding RMM in blogosphere, twitter and rails business google group , I concluded  that we might need some open system instead of something like RMM.</p>
<p>Following is an aggregation of views by various people who feel the need of a some model but dont like the idea of auditors, closed systems or certifications :</p>
<p>For time being , I am calling it Open Maturity Model and trying to draft some  basic principles and guidelines.</p>
<h2>So, What is Open Maturity Model ?</h2>
<h3>For Developers</h3>
<p>1. Roadmap for Rails developers to <strong>adopt best practices</strong> defined by the community.</p>
<p>2. Community giving<strong> newcomers </strong>a more-or-less official set of guidelines for how to <strong>produce quality work</strong>. Having some sort of guideline from a trustworthy source is becoming more difficult.</p>
<p>3. It will <strong>not take fun out of rails</strong> or kills innovation. It will just make the rails community stronger and will attract more people who are not yet sure about rails.</p>
<p>4. <strong>Judge yourself</strong> , instead of an expensive auditor judging you &#8211; if you are serious about doing quality work, open maturity model will give you a good point to start with.</p>
<p>5.  Let<strong> experienced developers</strong> share their experience on a <strong>common wiki </strong> in addition to blog posts about their experiences all on their own.</p>
<h3>For Clients</h3>
<p>1. A no nonsense, no lingo system to help a prospective client to choose a ROR shop. Give them more than just testimonials , a blog post, or a portfolio. The intent is to establish a <strong>minimum standard of operational efficiency</strong> so that clients who hire based on it can be sure they aren&#8217;t dealing with complete idiots.</p>
<p>2. Let&#8217;s <strong>share Business Knowledge</strong> &#8211; most development shops are busy coding and spend little to no effort on marketing or business development. Groups like <a href="http://groups.google.com/group/rails-business">rails busines</a>s is a good start in this direction.</p>
<h3>For Process</h3>
<p>1. XP , SCRUM or whatever. One size doesnt fit all. At Vinsol, we follow a process which has evolved after lot of not-so-successful iterations. It works for us and we want to improve and share it with community. But we <strong>don&#8217;t </strong>want to <strong>call our process or anybody else&#8217;s practice &#8220;The Rails Way&#8221;</strong>. Again , a community website  where companies can register and document the level of process they implement allowing for clients and other companies to provide feedback so they could get ranked.</p>
<p>2. Instead of wasting resources proving that we are level 4 or level 5 by an external auditor, lets just focus on <strong>why we are in the business</strong> &#8211; writing good quality code, having fun doing it and building awesome applications.</p>
<p>3. <strong>Continous improvement </strong>is very important for growth and survival of many rails companies with thousands of rails shops opening around the world.</p>
<p><strong>Certifications</strong></p>
<p>1. Replace open source projects with certification &#8211; <strong>open source can play the role of  certification</strong>.  Have you ever contributed or tried to contribute  to rails core ? or, show us an interesting/useful open source project you started, or point to bugs that you submitted.</p>
<p>Looking for ideas and suggestions.</p>
<p>Update :  Matthew Ford has started a rails manifesto document in github. Please add your best practices here &#8211; <a href="http://gist.github.com/65183">http://gist.github.com/65183</a></p>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2009/11/12/10-little-known-ways-to-find-a-ruby-on-rails-team-for-your-next-project/' rel='bookmark' title='Permanent Link: 10 little known ways to find a ruby on rails team for your next project'>10 little known ways to find a ruby on rails team for your next project</a> <small>Everytime we talk to our clients, we find that they...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2009/02/15/open-maturity-model-lets-share-best-practices-without-auditors-or-certifications/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Presented faceted search using ultrasphinx</title>
		<link>http://vinsol.com/blog/2008/11/25/presented-faceted-search-using-ultrasphinx/</link>
		<comments>http://vinsol.com/blog/2008/11/25/presented-faceted-search-using-ultrasphinx/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 01:15:21 +0000</pubDate>
		<dc:creator>Akhil Bansal</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rails plugins]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://webonrails.com/?p=131</guid>
		<description><![CDATA[The first ruby funday held on 22nd Nov 2008 in New Delhi, India. I presented on faceted search using ultrasphinx. I also gave a live demo there. Here are the slides:
Facet Searching using Ultrasphinx
View SlideShare presentation or Upload your own. (tags: sphinx ultrasphinx)

You can ask me if you have any doubt.







No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>The first ruby funday held on 22nd Nov 2008 in New Delhi, India. I presented on faceted search using ultrasphinx. I also gave a live demo there. Here are the slides:</p>
<div  id="__ss_783712"><a  href="http://www.slideshare.net/bansalakhil/facet-searching-using-ultrasphinx-presentation?type=powerpoint" title="Facet Searching using Ultrasphinx">Facet Searching using Ultrasphinx</a><object  width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=facet-1227545742495755-9&#038;stripped_title=facet-searching-using-ultrasphinx-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=facet-1227545742495755-9&#038;stripped_title=facet-searching-using-ultrasphinx-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div >View SlideShare <a  href="http://www.slideshare.net/bansalakhil/facet-searching-using-ultrasphinx-presentation?type=powerpoint" title="View Facet Searching using Ultrasphinx on SlideShare">presentation</a> or <a  href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a  href="http://slideshare.net/tag/sphinx">sphinx</a> <a  href="http://slideshare.net/tag/ultrasphinx">ultrasphinx</a>)</div>
</div>
<p>You can ask me if you have any doubt.</p>
<map name='google_ad_map_131_d007f24531aa3a6e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/131?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<p><img usemap='#google_ad_map_131_d007f24531aa3a6e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=131&amp;url= http%3A%2F%2Fwebonrails.com%2F2008%2F11%2F25%2Fpresented-faceted-search-using-ultrasphinx%2F' /></p>
]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2008/11/25/presented-faceted-search-using-ultrasphinx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminate called after throwing an instance of ‘int’</title>
		<link>http://vinsol.com/blog/2008/11/24/terminate-called-after-throwing-an-instance-of-%e2%80%98int%e2%80%99/</link>
		<comments>http://vinsol.com/blog/2008/11/24/terminate-called-after-throwing-an-instance-of-%e2%80%98int%e2%80%99/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 00:59:34 +0000</pubDate>
		<dc:creator>Akhil Bansal</dc:creator>
				<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://webonrails.com/?p=120</guid>
		<description><![CDATA[Ever faced &#8220;terminate called after throwing an instance of &#8216;int&#8217; &#8221; error in RubyOnRails?
or
Specially on linux machine only not on windows.
Error occurred specially when dealing with some image handling, or with attachment_fu. 
The cause of this error is image_science 1.1.3 . Add :processor => &#8220;Rmagick&#8221;  to has_attachment options and get rid of this problem. [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Ever faced &#8220;terminate called after throwing an instance of &#8216;int&#8217; &#8221; error in RubyOnRails?<br />
or<br />
Specially on linux machine only not on windows.</p>
<p>Error occurred specially when dealing with some image handling, or with attachment_fu. </p>
<p>The cause of this error is image_science 1.1.3 . Add :processor => &#8220;Rmagick&#8221;  to has_attachment options and get rid of this problem. </p>
<p>Enjoy!!!<br />
<map name='google_ad_map_120_d007f24531aa3a6e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/120?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<p><img usemap='#google_ad_map_120_d007f24531aa3a6e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=120&amp;url= http%3A%2F%2Fwebonrails.com%2F2008%2F11%2F24%2Fterminate-called-after-throwing-an-instance-of-int%2F' /></p>
]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2008/11/24/terminate-called-after-throwing-an-instance-of-%e2%80%98int%e2%80%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hoptoad: A Rails Exception Handling Service</title>
		<link>http://vinsol.com/blog/2008/08/12/hoptoad-an-rails-exception-handling-service/</link>
		<comments>http://vinsol.com/blog/2008/08/12/hoptoad-an-rails-exception-handling-service/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 10:31:17 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Rails Deprecations]]></category>
		<category><![CDATA[RubyonRails]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[hoptoad]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rails plugins]]></category>
		<category><![CDATA[thoughtbot]]></category>

		<guid isPermaLink="false">http://webonrails.com/2008/08/12/hoptoad-an-rails-exception-handling-service/</guid>
		<description><![CDATA[Many of you guys(as me) may have used Exception Notifier plugin to get Rails app exceptions right into your mailbox, and may also have faced some problem like this. 
Also if you have 2-3 or more apps running in production then managing such exception mails is also a big headache. In such case one have [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Many of you guys(as me) may have used Exception Notifier plugin to get<a href="http://webonrails.com/2006/12/28/plugin-exception-notifier-get-detail-information-of-exceptions-occurred-on-the-live-server-right-on-your-inbox/"> Rails app exceptions right into your mailbox</a>, and may also have faced some problem like <a href="http://webonrails.com/2007/07/26/careful-while-using-exception-notifier-plugin/">this</a>. </p>
<p>Also if you have 2-3 or more apps running in production then managing such exception mails is also a big headache. In such case one have to keep track of many things like which type of error is resolved/unresolved for which project etc&#8230; .</p>
<p>So, here is a good news for those who don&#8217;t know about <a href="http://www.thoughtbot.com/">Hoptoad</a>. It is an hosted service by <a href="http://www.thoughtbot.com/">thoughtbot</a> which receives your exceptions, notify you once per error type by email and keep track(resolved/unresolved, count etc&#8230;) of your errors on project basis. </p>
<p>By now its a free service. I&#8217;m gonna use this as my next project goes live. What abt you??? ;-P</p>
]]></content:encoded>
			<wfw:commentRss>http://vinsol.com/blog/2008/08/12/hoptoad-an-rails-exception-handling-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
