<?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</title>
	<atom:link href="http://vinsol.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://vinsol.com/blog</link>
	<description>Ruby Rails Services</description>
	<lastBuildDate>Mon, 16 Nov 2009 10:49:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>11 Things to Consider Before Deploying Your Rails Application</title>
		<link>http://vinsol.com/blog/2009/11/16/11-things-to-consider-before-deploying-your-rails-application/</link>
		<comments>http://vinsol.com/blog/2009/11/16/11-things-to-consider-before-deploying-your-rails-application/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 08:43:46 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[about this site]]></category>
		<category><![CDATA[checklist]]></category>
		<category><![CDATA[deployment]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=787</guid>
		<description><![CDATA[At VinSol, we have been developing and deploying Rails applications for more than four years. During this period, we  have identified some best practices that we prefer to follow while deploying  rails application to production server.
Below is the checklist of these practices:
 &#160; 
1. Ensure that NS records and MX records are changed if they [...]


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>At VinSol, we have been developing and deploying Rails applications for more than four years. During this period, we  have identified some best practices that we prefer to follow while deploying  rails application to production server.</p>
<p>Below is the checklist of these practices:</p>
<p> &nbsp; </p>
<p><strong>1. </strong><strong>Ensure that NS records and MX records are changed if they need to be changed</strong></p>
<p>Changing nameservers will point the domain to the hosting server,  and changing MX records will redirect incoming mails to the mail server. As a very first step, we should make sure that name servers of the domain are set to be the correct one.  Changing MX record is a must if our application is parsing incoming mails or we wants to use other mail services for e-mail exchange, for example Gmail.</p>
<p> &nbsp; </p>
<p><strong>2. Ensure some backup mechanism in place for both data as well as user uploaded content like images/documents etc.</strong></p>
<p>Since production data is very critical, we must setup backup  mechanism. It could be some type of scheduled task that takes periodic backup of all critical data, Or it could be some type of backup service provided by hosting company. When we talk about critical production data, it includes production DB, content generated by application users like images, documents, etc.</p>
<p> &nbsp; </p>
<p><strong>3. Ensure database indexes</strong></p>
<p>We might have done development without having proper database indexes, but we should avoid going to production without them. Adding indexes might slow down insert queries a bit but it increases the  performance of read queries. It applies when application in production has percentage of read operations much more than write operations.</p>
<p> &nbsp; </p>
<p><strong>4. Enable your slow query log</strong></p>
<p>This is specific to MySQL. Enabling slow query log allows MySQL to log slow running queries to a file. And this log can be used to find queries that take a long time to execute and are therefore candidates for optimization.</p>
<p> &nbsp; </p>
<p><strong>5. Ensure exception capturing is in place</strong></p>
<p>We might want to be notified when something bad happens to our application. There are several hosted services available who receive and track exceptions, for example <a href="hoaptoadapp.com" target="_blank">Hoptoadapp.com</a>,<a href="http://getexceptional.com/"> GetExceptional.com</a> etc&#8230;  Either we can choose one from these hosted services or we can use <a href="http://agilewebdevelopment.com/plugins/exception_notifier">“exception notifier”</a> plugin.</p>
<p> &nbsp; </p>
<p><strong>6. Ensure adding entries for cron/scheduled jobs</strong></p>
<p>Most of the applications have some functionality/jobs that need to be run periodically, for example generating invoices, sending newsletters etc.  In most cases these jobs are done by a rake task. We should make sure that we have added such jobs to cron or similar program.</p>
<p> &nbsp; </p>
<p><strong>7.  Monitoring important processes</strong></p>
<p>To ensure that our site is up 24&#215;7 we need to ensure that all processes that our application needs are up. There can be many processes like MySQL, Mongrel, Apache etc.. These processes are very important as our application directly depends on them. For example if MySQL process get killed accidentally, our application would not be able to connect to MySQL and will start throwing exceptions.</p>
<p>We can choose any of the available monitoring tools like God, Monit, 24&#215;7 etc&#8230;</p>
<p> &nbsp; </p>
<p><strong>8. Ensure confidential data filtering</strong></p>
<p>We would never like to leak/share confidential information of our application users. We should make sure that none of the user&#8217;s confidential data like SSN, Credit card info, password are being written to log files. We might not have paid much attention on this while developing the application.</p>
<p> &nbsp; </p>
<p><strong>9. Rotate log files</strong></p>
<p>Once our site is up and running, every single request write some text in log file. And hence size of the  log file keeps on increasing. Larger log files can put us in trouble if we get it beyond certain size. Its difficult to manage these log files, as larger files need more memory to open and need more time to download. In one of the rescue project we did , the log file size was 3GB.</p>
<p>We would recommend having<a href="http://www.nullislove.com/2007/09/10/rotating-rails-log-files/"> logrotate setup</a> for the application.</p>
<p> &nbsp; </p>
<p><strong>10. Setup Asset Host </strong></p>
<p>Setting up asset hosts can reduce loading time by 50% or more. We must setup asset hosts for our application. Once asset hosts are all set, our static files will be delivered via asset hosts for example asset1.hostname.com, asset2.hostname.com</p>
<p> &nbsp; </p>
<p><strong>11. Clearing up stale sessions</strong></p>
<p>We should make sure we should not left any stale session on the server. If our application is using DB or file system  as session store, we must add a schedule task to delete stale sessions.</p>
<p>These are some of the points we have identified from our past experience and we might be missing some. Feel free to  always add them as comments, and I&#8217;ll keep this post updated.</p>
<hr size = 2 width = "98%" style="border-top:2px dotted grey; margin: 5px;"/>
<img src="http://www.gravatar.com/avatar/174330d280860a6ad77a6d15dd7fabe1?s=96&#038;d=wavatar&#038;r=G" height="50" align="left" hspace="10" vpsace="10" /> <a href="http://www.webonrails.com" target="_blank"> Akhil </a> is a senior software engineer working with Vinsol for last 5 years. He is an inhouse deployment ninja.</p>
<div style ="clear:both"> &nbsp;</div>
<hr size = 2 width = "98%" style="border-top:2px dotted grey; margin: 5px;"/>
<p> &nbsp; </p>
<p>We also provide affordable <a href="http://vinsol.com/rails-deployment-services"> rails deployment services</a>.  </p>
<p> &nbsp; </p>
<p> &nbsp; </p>


<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/11/16/11-things-to-consider-before-deploying-your-rails-application/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>10 little known ways to find a ruby on rails team for your next project</title>
		<link>http://vinsol.com/blog/2009/11/12/10-little-known-ways-to-find-a-ruby-on-rails-team-for-your-next-project/</link>
		<comments>http://vinsol.com/blog/2009/11/12/10-little-known-ways-to-find-a-ruby-on-rails-team-for-your-next-project/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 11:48:47 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[about this site]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=778</guid>
		<description><![CDATA[Everytime we talk to our clients, we find that they are not aware of lot of options through which they can find a good rails developer. Usually clients go to odesk and other freelance websites to find rails developers. Following are  10 more ways to find  rails company/developer for your next dream project :

 Post [...]


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>Everytime we talk to our clients, we find that they are not aware of lot of options through which they can find a good rails developer. Usually clients go to <a href="www.odesk.com" target="_blank">odesk</a> and other freelance websites to find rails developers. Following are  10 more ways to find  rails company/developer for your next dream project :</p>
<ol>
<li> Post your requirements on twitter with hashtag #ruby #ror #rails</li>
<li> Go to <a href="http://www.railsdevelopment.com ">Railsdevelopment.com </a>- its a directory of rails companies. You can search for specific services with your budget ranges.</li>
<li><a href="http://www.workingwithrails.com/browse/companies">Working with Rails</a> &#8211; Again a directory of rails developers and companies. You can browse through specific industry categories.</li>
<li>Local Ruby Meetups &#8211; The most passionate guys are always there in local meetups. For eg: we have <a href="http://www.meetup.com/delhi-ruby">delhi ruby </a>meetups and you can find all local meetups in <a href=" http://rubyonrails.com.au/" target="_blank">australia here </a></li>
<li><a href="http://www.railsmaturitymodels.com/"></a></li>
<li>RubyJobs &#8211; Post a job on <a href="http://jobs.rubynow.com/" target="_blank">rubyjobs</a> or <a href="http://jobs.rubyinside.com/a/jbb/find-jobs">rubyinside</a> job board. There are some country specific ruby job boards.</li>
<li>RubyonRails wiki &#8211; There is a<a href="http://newwiki.rubyonrails.org/rails/pages/developmentfirms#asia" target="_blank"> wiki of ruby on rails </a>companies.</li>
<li>Open Source Contributions &#8211; Sites like <a href="agilewebdevelopment.com" target="_blank">http://agilewebdevelopment.com/</a> gives you a directory of rails plugins. Open Source contributions such as releasing a Rails plugin, or fixing bugs on projects , or Rails itself, demonstrates exposure to other Rails code bases and quality of a developer. Search for developer name in <a href="http://www.github.com">github</a>.</li>
<li>Conferences &#8211; Conferences are good way to find<a href="http://weblog.rubyonrails.org/2009/7/18/ruby-rails-conferences-in-09"> quality rails developer </a>or team.</li>
<li>Facebook &#8211; Few people post jobs on<a href="http://www.facebook.com/board.php?uid=8537680906"> facebook. </a></li>
</ol>
<p>Few tips :</p>
<ul>
<li>Don&#8217;t hire someone that doesn&#8217;t know Rails at all. Yes, we have seen some people doing it.</li>
<li>Ask for references of previous clients if possible in your country.</li>
<li>Look for someone who values the money you are paying them and will make your investment in them provide a valuable return.</li>
<li>A personal Rails blog is a good indicator of  developer&#8217;s interests , experience and resume.</li>
</ul>


<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/11/12/10-little-known-ways-to-find-a-ruby-on-rails-team-for-your-next-project/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Integrating Yahoo! BOSS with your 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 [...]


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>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 = &lt;Your Application ID&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(&quot;Apple Pie&quot;, { :count =&gt; 2, :filter =&gt; &quot;-hate&quot; })
puts &quot;Number of results: #{boss.totalhits}&quot;

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

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

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

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

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

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

# =&gt; John Cena - WWE: Raw
# =&gt; www.&lt;b&gt;wwe.com&lt;/b&gt;/super&lt;b&gt;star&lt;/b&gt;s/raw/&lt;wbr&gt;johncena
# =&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(&quot;snow hills&quot;, { :dimensions =&gt; &quot;large&quot; })

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

# =&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(&quot;free shipping&quot;, { :age =&gt; &quot;1d-2w&quot;, :orderby =&gt; &quot;date&quot;, :count =&gt; 1})

boss.results.each do |result|
  puts &quot;#{result.title} [from #{result.source}]&quot;
  puts &quot;#{result.abstract}&quot;
end
# =&gt; Wal-Mart announces weekly price cuts for holidays [from USA Today]
# =&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(&quot;acknowlegment&quot;)
puts boss.suggestion # =&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(&quot;http://mail.yahoo.com&quot;, :count =&gt; 2)
links.results.map { |result| p result.url }
# =&gt; http://www.aol.com/
# =&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(&quot;twitter.com&quot;, :count =&gt; 1)
links.results.map { |result| p &quot;#{result.url} - #{result.abstract}&quot; }
# =&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 &lt;b&gt;...&lt;/b&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>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/10/29/integrating-yahoo-boss-with-your-rails-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>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 [...]


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>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;">
&lt;% if logged_in? %&gt;
&lt;li class=&quot;delete &lt;%= 'only_' + (message.owner.login) + '_delete_allowed' %&gt;&quot;&gt;
  &lt;%= link_to_remote &quot;Delete&quot;,
    :url =&gt; user_message_path(current_user, message)
    :method =&gt; :delete,
    :confirm =&gt; &quot;Are you sure you wish to delete this message?&quot;,
    :html =&gt; { :title =&gt; &quot;Delete Post&quot; } %&gt;
&lt;/li&gt;
&lt;% end %&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;">
&lt;% if logged_in? %&gt;
  &lt;% if current_user.is_admin? %&gt;
    &lt;%= javascript_tag &quot;$(document).ready(function() { MessageView.removeInvalidDeteteButtons('only_#{current_user.login}_delete_allowed', 'true'); });&quot; %&gt;
  &lt;% else %&gt;
    &lt;%= javascript_tag &quot;$(document).ready(function() { MessageView.removeInvalidDeteteButtons('only_#{current_user.login}_delete_allowed'); });&quot; %&gt;
  &lt;% end %&gt;
&lt;% end %&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;">
&lt;%= javascript_tag &quot;var AUTH_TOKEN = #{form_authenticity_token.inspect};&quot; if protect_against_forgery? %&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) == &quot;undefined&quot;) return;
  var authTokenRegExp = /authenticity_token=\w{40}/
  settings.data = settings.data || &quot;&quot;;
  if (authTokenRegExp.test(settings.data))
  {
    settings.data=settings.data.replace(authTokenRegExp, &quot;authenticity_token=&quot; + encodeURIComponent(AUTH_TOKEN));
  }
  else
  {
    settings.data += (settings.data ? &quot;&amp;&quot; : &quot;&quot;) + &quot;authenticity_token=&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;">
&lt;span&gt;
  &lt;%= process_message_body_timestamp(message) %&gt;
&lt;/span&gt;
</pre>
<p>And the helper code is:</p>
<pre class="brush: ruby;">
def process_message_body_timestamp(message)
  link_to &quot;#{message.created_at}&quot;, show_message_url(message), :class =&gt; &quot;timestamps&quot;
end
</pre>
<p>I put the following code in the layout(non-cached):</p>
<pre class="brush: ruby;">
&lt;%= javascript_tag &quot;$(document).ready(function() { CustomDate.datify(#{get_custom_date_arguments}) });&quot; %&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
  &quot;#{current_time.year},#{current_time.month-1},#{current_time.day},#{current_time.hour},#{current_time.min},#{current_time.sec}&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,&quot;/&quot;).replace(/[TUTC]/g,&quot; &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 &lt; 0) {
      seconds = Math.abs(seconds);
      token = '';
      prepend = 'in ';
    }

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

    // overflow for centuries
    if(seconds &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>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/09/07/rails-caching-and-javascript-techniques/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to Integrate TinyMce with Redbox in 5 steps ?</title>
		<link>http://vinsol.com/blog/2009/09/04/how-to-integrate-tinymce-with-redbox-in-5-steps/</link>
		<comments>http://vinsol.com/blog/2009/09/04/how-to-integrate-tinymce-with-redbox-in-5-steps/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 13:23:12 +0000</pubDate>
		<dc:creator>payal</dc:creator>
				<category><![CDATA[about this site]]></category>
		<category><![CDATA[popup]]></category>
		<category><![CDATA[popup and tinymce]]></category>
		<category><![CDATA[redbox]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=716</guid>
		<description><![CDATA[TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control.  It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.
Redbox is a library that pops a modal box over a web page, using CSS and javascript, so that you can ask the user a question, or [...]


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>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control.  It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
<p>Redbox is a library that pops a modal box over a web page, using CSS and javascript, so that you can ask the user a question, or show them something important. The box can be loaded from content already on the page (but hidden), or it can be loaded via AJAX. The contents of the box can be replaced using AJAX, for multi-page forms, and it can be closed easily using a javascript link.</p>
<p>Here is the process for integrating Redbox and tinymce.</p>
<p><strong>Step I:</strong><br />
Install required plugins:</p>
<p>- TinyMce(<a href="http://github.com/kete/tiny_mce/tree/master">http://github.com/kete/tiny_mce/tree/master</a>)<br />
- RedBox(<a href="http://www.craigambrose.com/projects/redbox">http://www.craigambrose.com/projects/redbox</a>)</p>
<p><strong>Step II:</strong><br />
Include javascript files to layout:</p>
<pre class="brush: ruby;">
  &lt;%= include_tiny_mce_js %&gt;
  &lt;%= javascript_tag &quot;initialize_editor();&quot; %&gt;
</pre>
<p>Now, add this javascript method which initilizes the text editor. You can specify the options you want for your text editor here.</p>
<p>Javascript:</p>
<pre class="brush: ruby;">function  initialize_editor(){
  tinyMCE.init({
    theme:&quot;advanced&quot;,
    //mode:&quot;textareas&quot;, // this is commented because we do not want to apply the editor to all the text area
     instances. Instead, we will use the class &quot;mceEditor&quot; to specify on which element we want to add the editor.
    theme_advanced_toolbar_location:&quot;top&quot;,
    theme_advanced_toolbar_align:&quot;left&quot;,
    theme_advanced_resizing:true,
    theme_advanced_resize_horizontal:false,
    paste_auto_cleanup_on_paste:true,
theme_advanced_blockformats:&quot;p,address,pre,h1,h2,h3,h4,h5,h6&quot;,
    theme_advanced_buttons1:&quot;bold, italic, underline, strikethrough, | , undo, redo, link, unlink, image, | , bullist, numlist&quot;,
    theme_advanced_buttons2:&quot;&quot;,
    theme_advanced_buttons3:&quot;&quot;,
    dialog_type:&quot;modal&quot;
  });
}</pre>
<p><strong><br />
Step III:</strong></p>
<p><strong><br />
</strong></p>
<p>Add editor class &#8220;mceEditor&#8221; to the text area where you want the editor to be added.</p>
<pre class="brush: ruby;">&lt;%= f.text_area :details, :id =&gt; 'ta_id', :class =&gt; 'mceEditor' %&gt;</pre>
<p>Now, we need to create a tinymce editor control for the text area(&#8217;ta_id&#8217;) on loading the popup so add this &#8220;execCommand&#8221; loads the tinyMCE in the textarea.</p>
<pre class="brush: ruby;">&lt;script type=&quot;text\javascript&quot;&gt;
  tinyMCE.execCommand('mceAddControl', true, &quot;ta_id&quot;);
&lt;/script&gt;</pre>
<p><strong>Step IV:</strong></p>
<p><strong><br />
</strong></p>
<p>When we submit our form and copy over the editor content to the text box it references. Tinymce provides a method &#8216;triggerSave&#8217; that moves the contents from the editor to the form field. This method is automatically called by tinyMCE by adding a trigger on the forms submit method.</p>
<p>Save the content:</p>
<pre class="brush: ruby;">&lt;%= f.submit 'Save', :class =&gt; 'primaryAction', :onclick =&gt; &quot;tinyMCE.triggerSave(true,true);&quot; %&gt;</pre>
<p><strong>Step V:</strong></p>
<p><strong><br />
</strong></p>
<p>Whenever we close our popup redbox we need to remove the tinymce editor control that we had added. Remove control on closing the redbox:</p>
<pre class="brush: ruby;">&lt;%= link_to_close_redbox 'Close', {:onclick =&gt; &quot;tinyMCE.execCommand('mceRemoveControl', true, 'ta_id'});&quot;} %&gt;</pre>
<p>Works on: Firefox(1.5+), Safari and IE(7+)</p>
<p>For Internet Explorer  we need to initialize the editor on loading the pop-up but for firefox we need to initalize editor on loading the main page. So we need modify our javascript</p>
<pre class="brush: ruby;">&lt;script type=&quot;text\javascript&quot;&gt;
  if(navigator.appName==&quot;Microsoft Internet Explorer&quot;)
  	initialize_editor();
  tinyMCE.execCommand('mceAddControl', true, &quot;ta_id&quot;);
&lt;/script&gt;</pre>
<p>And so here we are ready to go in just five simple steps.</p>
<p>Refer <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Functions">here </a>for more details.</p>


<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/09/04/how-to-integrate-tinymce-with-redbox-in-5-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Now You Can Have Better Youtube Integration with Ruby on Rails</title>
		<link>http://vinsol.com/blog/2009/07/30/now-you-can-have-better-youtube-integration-with-ruby-on-rails/</link>
		<comments>http://vinsol.com/blog/2009/07/30/now-you-can-have-better-youtube-integration-with-ruby-on-rails/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 11:47:29 +0000</pubDate>
		<dc:creator>vibha</dc:creator>
				<category><![CDATA[about this site]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=677</guid>
		<description><![CDATA[I recently wanted to upload, edit, update and delete a video directly on youtube from my rails application. This can be achieved by YouTube Data API that allows application to perform functions normally executed on youtube.
Step 1 : Demystifying Authentication with Google AuthSub
Google provides an authentication service to those web applications that need to access [...]


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>I recently wanted to upload, edit, update and delete a video directly on youtube from my rails application. This can be achieved by YouTube Data API that allows application to perform functions normally executed on youtube.</p>
<p><strong>Step 1 : Demystifying Authentication with Google AuthSub</strong></p>
<p>Google provides an authentication service to those web applications that need to access services protected by a user&#8217;s Google account. I chose<a href="http://code.google.com/apis/accounts/docs/AuthSub.html"> Google’s ‘AuthSub’ scheme</a> for this. This also provides a high level of security to web application.<br />
The AuthSub interface provides several methods for acquiring and managing authorization tokens. Once a web application has received a token, it can request access to a Google service.</p>
<p>To obtain an authentication token, submit an HTTP POST request to the following URL:</p>
<pre class="brush: ruby;">
https://www.google.com/accounts/AuthSubRequest?next=http%3A%2F%2Fwww.example.com%2Fupload.html&amp;scope=http%3A%2F%2Fgdata.youtube.com&amp;session=0&amp;secure=0
</pre>
<p>Setting session parameter to 1 indicates that the single-use token can be exchanged for a session token.<br />
<a href="http://code.google.com/apis/accounts/docs/AuthSub.html#AuthSubSessionToken">AuthSubSessionToken</a> is a method that allows the web application to exchange a single-use token for a session token. I used a gem ‘gdata’ to convert the token into a session token.</p>
<pre class="brush: ruby;">
client = GData::Client::DocList.new
client.authsub_token = params[:token]
session[:token] = client.auth_handler.upgrade()
</pre>
<p>Session token allows the application to make unlimited calls to the Google service. When using session tokens, your application should store the session token for each user rather than requesting a new one each time it needs to access a Google service. For other token management options, see <a href="http://code.google.com/apis/accounts/docs/AuthSub.html#WorkingAuthSub">Working With AuthSub.</a></p>
<p><strong>Step 2 : Getting the Youtube Developer Key</strong></p>
<p>A developer key is required that identifies the YouTube developer that is submitting an API request. A client ID identifies your application for logging and debugging purposes. Please visit <a href="http://code.google.com/apis/youtube/dashboard/">here</a> to obtain a developer key and client ID.</p>
<p><strong>Step 3 : Improving the Youtube Model</strong> <strong>Plugin</strong></p>
<p><a href="http://github.com/edgarjs/youtube-model/tree/master">“youtube-model”</a> is a plugin  that provides youtube video uploading functionality. That was a good start.<br />
I forked the plugin and updated it with few methods to get the rest of  the functionality done. Each method is explained here.<br />
<strong>1. uploaded_by_user</strong><br />
A method uploaded_by was provided in the plugin to retrieve all the videos of the user but it receives username as a parameter. So I added a method uploaded_by_user that receives the session token and solves our purpose.</p>
<pre class="brush: ruby;">
YouTube.uploaded_by_user(session[:token])
</pre>
<p><strong>2. update_video</strong><br />
The video can be updated by using this method passing video id, session token and params hash as parameters.</p>
<pre class="brush: ruby;">
YouTube.update_video(params[:id], session[:token], params[:you_tube_entry])
</pre>
<p><strong>3. delete_video</strong><br />
The video can also be deleted if uploaded at the user’s youtube account by passing video id and token as a parameter.</p>
<pre class="brush: ruby;">
YouTube.delete_video(params[:id], session[:token])
</pre>
<p><strong>4. video_status</strong><br />
This method helps finding out the status of uploaded video.</p>
<pre class="brush: ruby;">
s = YouTube.video_status(session[:token], params[:id])
@status = s.control.state.name
</pre>
<p>The changes to the plugin have been merged in the master and you can download everything <a href="http://github.com/vibha/youtube-model/tree/master">here</a>. I will really appreciate your feedback and suggestions to make this plugin better.</p>
<p><img class="alignleft" src="http://vinsol.com/components/com_staffmaster/images/vibha_vinsol.jpg" alt="" width="43" height="37" /> Vibha Chadha is working with Vinsol as a rails developer. When she is not writing code, she likes to read &#8220;geek&#8221; books and listen  to some &#8220;good&#8221; music.</p>


<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/07/30/now-you-can-have-better-youtube-integration-with-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Work Flow For 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 [...]


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>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 &quot;tracking&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 &quot;0&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>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/07/24/git-work-flow-for-rails-developers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>New Rails Plugin- Launching Soon has launched</title>
		<link>http://vinsol.com/blog/2009/07/14/launching-soon/</link>
		<comments>http://vinsol.com/blog/2009/07/14/launching-soon/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 13:36:02 +0000</pubDate>
		<dc:creator>manik</dc:creator>
				<category><![CDATA[plugin]]></category>
		<category><![CDATA[rails plugins]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails plugin]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=641</guid>
		<description><![CDATA[&#8220;Launching Soon&#8221; is a new plugin that VinSol has developed.
Working on client projects, we saw a pattern &#8211; the client owns a domain, which is either parked or has a blog running on it, and then they commission us to build an application. While the application is being developed, they want us to setup a [...]


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>&#8220;<a href="http://github.com/vinsol/Launching-Soon/tree/master" target="_blank">Launching Soon</a>&#8221; is a new plugin that VinSol has developed.</p>
<p>Working on client projects, we saw a pattern &#8211; the client owns a domain, which is either parked or has a blog running on it, and then they commission us to build an application. While the application is being developed, they want us to setup a landing page on the server, with a couple of  links &#8211; to the blog etc. and want to capture email addresses of people who are interested in the service that the application would offer.</p>
<p>We actually found a few ready to use options for this. This <a href="http://launchsoon.com/" target="_blank">php based paid script</a> was one and there is also a  <a href="http://woork.blogspot.com/2009/06/how-to-implement-launching-soon-page-in.html">free launching soon </a>module in PHP/Jquery.</p>
<p>However, we did not find anything for Rails so <a href="http://satishchauhan.com" target="_blank">Satish</a> set out to write a plugin for it. Then we thought it would be good to integrate it with <a href="http://campaignmonitor.com/" target="_blank">Campaign Monitor</a> , since most of our clients use this service for running their email campaigns.  And subsequently Satish extended it to add <a href="http://www.mailchimp.com/" target="_blank">Mail Chimp</a> integration also.</p>
<p>Give it a spin and send us your feedback via the <a href="https://vinsol.lighthouseapp.com/projects/31867-launching-soon/overview" target="_blank">LightHouse project.</a></p>


<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/07/14/launching-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsConf Day 1 &#8211; Links to slides and blog posts</title>
		<link>http://vinsol.com/blog/2009/05/05/railsconf-day-1-links-to-slides-and-blog-posts/</link>
		<comments>http://vinsol.com/blog/2009/05/05/railsconf-day-1-links-to-slides-and-blog-posts/#comments</comments>
		<pubDate>Tue, 05 May 2009 11:49:44 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[about this site]]></category>
		<category><![CDATA[railsconf]]></category>
		<category><![CDATA[railsconf09]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=626</guid>
		<description><![CDATA[
This is the official link for all the presentation files, so whenever you are looking for PPTs , this is the first place

 http://en.oreilly.com/rails2009/public/schedule/proceedings

I really liked Arun Gupta&#8217;s post on Jruby on Rails and Sinatra.

Also, discovered Rack middleware for request rewriting.
Liked this starter for jruby on google app engine http://jruby-rack.appspot.com/
Robert Dempsey tutorial on  rails basics [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2009/05/01/5-fresh-apps-to-maximize-your-railsconf-09-experience/' rel='bookmark' title='Permanent Link: 5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience'>5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience</a> <small>We will be again going to Rails Conf this year...</small></li><li><a href='http://vinsol.com/blog/2009/05/03/why-railsconf-at-las-vegas-is-a-great-opportunity-for-the-community/' rel='bookmark' title='Permanent Link: Why RailsConf at Las Vegas is a great opportunity for the community ?'>Why RailsConf at Las Vegas is a great opportunity for the community ?</a> <small>Just few hours before start of rails conf 09 ,...</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[<ul>
<li>This is the official link for all the presentation files, so whenever you are looking for PPTs , this is the first place</li>
</ul>
<p><a href="http://en.oreilly.com/rails2009/public/schedule/proceedings"> http://en.oreilly.com/rails2009/public/schedule/proceedings</a></p>
<ul>
<li>I really liked Arun Gupta&#8217;s post on <a href="http://blogs.sun.com/arungupta/entry/rails_conf_2009_day_1">Jruby on Rails and Sinatra.<br />
</a></li>
<li>Also, discovered <a href="http://github.com/joshbuddy/rack-rewrite/blob/b7fd99e9f8d0fd0cffc9d2c71eccf00f978903ba/README.rdoc">Rack middleware for request rewriting.</a></li>
<li>Liked this starter for jruby on google app engine <a href="http://jruby-rack.appspot.com/">http://jruby-rack.appspot.com/</a></li>
<li>Robert Dempsey tutorial on  rails basics was cool. You can find ppt and code samples  here : <a href="http://blog.adsdevshop.com/2009/05/05/a-z-intro-to-ruby-on-rails-goodies/">http://blog.adsdevshop.com/2009/05/05/a-z-intro-to-ruby-on-rails-goodies/</a></li>
<li>There was a session on Sphinx and Thinking Sphinx by Christophe Lucas <a href="http://docs.google.com/Present?docid=dg5gdk9c_9gp77bvfj">http://docs.google.com/Present?docid=dg5gdk9c_9gp77bvfj</a></li>
<li> Another good session on internationalization of ruby on rails application by Chirtophe <a href="http://docs.google.com/Present?docid=dg5gdk9c_20fg3dnhxv">http://docs.google.com/Present?docid=dg5gdk9c_20fg3dnhxv</a></li>
<li>There was a session on agile estimation but I couldn&#8217;t locate its stuff. <a href="http://twitpic.com/4l4q5/full">http://twitpic.com/4l4q5/full</a></li>
<li>Here are notes to SproutCore tutorial <a href="http://sproutcore-rails.s3.amazonaws.com/solution.txt">http://sproutcore-rails.s3.amazonaws.com/solution.txt</a></li>
<li>There was a talk on chef &#8211; here is a github link of <a href="http://github.com/ezmobius/chef-deploy/tree/master"><span id="repository_description">Chef Resources and Providers for deploying ruby web apps without capistrano</span></a></li>
</ul>
<p>Please add any other userful links which I missed through comments. Looking forward for day 2. We are wearing black t -shirts with Vinsol printed in red.</p>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2009/05/01/5-fresh-apps-to-maximize-your-railsconf-09-experience/' rel='bookmark' title='Permanent Link: 5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience'>5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience</a> <small>We will be again going to Rails Conf this year...</small></li><li><a href='http://vinsol.com/blog/2009/05/03/why-railsconf-at-las-vegas-is-a-great-opportunity-for-the-community/' rel='bookmark' title='Permanent Link: Why RailsConf at Las Vegas is a great opportunity for the community ?'>Why RailsConf at Las Vegas is a great opportunity for the community ?</a> <small>Just few hours before start of rails conf 09 ,...</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/05/05/railsconf-day-1-links-to-slides-and-blog-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why RailsConf at Las Vegas is a great opportunity for the community ?</title>
		<link>http://vinsol.com/blog/2009/05/03/why-railsconf-at-las-vegas-is-a-great-opportunity-for-the-community/</link>
		<comments>http://vinsol.com/blog/2009/05/03/why-railsconf-at-las-vegas-is-a-great-opportunity-for-the-community/#comments</comments>
		<pubDate>Sun, 03 May 2009 15:31:14 +0000</pubDate>
		<dc:creator>kapil</dc:creator>
				<category><![CDATA[about this site]]></category>
		<category><![CDATA[lasvegas]]></category>
		<category><![CDATA[railsconf]]></category>
		<category><![CDATA[railsconf09]]></category>

		<guid isPermaLink="false">http://vinsol.com/blog/?p=607</guid>
		<description><![CDATA[Just few hours before start of rails conf 09 ,  people have started assembling in Las Vegas.  Attendees reaching early are already finding themselves busy , I was following twitter stream of #railsconf  and  found some interesting tweets which you usually don&#8217;t find before a major tech conference :
: more than doubled my money playing [...]


Related posts:<ol><li><a href='http://vinsol.com/blog/2009/05/01/5-fresh-apps-to-maximize-your-railsconf-09-experience/' rel='bookmark' title='Permanent Link: 5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience'>5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience</a> <small>We will be again going to Rails Conf this year...</small></li><li><a href='http://vinsol.com/blog/2009/03/16/we-are-going-to-rails-conf-2009/' rel='bookmark' title='Permanent Link: We are going to Rails Conf 2009'>We are going to Rails Conf 2009</a> <small> Yes, We are going to Rails Conf this year. ...</small></li><li><a href='http://vinsol.com/blog/2009/05/05/railsconf-day-1-links-to-slides-and-blog-posts/' rel='bookmark' title='Permanent Link: RailsConf Day 1 &#8211; Links to slides and blog posts'>RailsConf Day 1 &#8211; Links to slides and blog posts</a> <small> This is the official link for all the presentation...</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>Just few hours before start of rails conf 09 ,  people have started assembling in Las Vegas.  Attendees reaching early are already finding themselves busy , I was following twitter stream of #railsconf  and  found some interesting tweets which you usually don&#8217;t find before a major tech conference :</p>
<p><em>: </em><span><em>more than doubled my money playing blackjack tonight. </em><a href="http://search.twitter.com/search?q=%23railsconf" target="_blank"><em>#</em></a><strong><a href="http://search.twitter.com/search?q=%23railsconf" target="_blank"><em>railsconf</em></a></strong></span></p>
<div><em> </em><span><em>:On my 27th hour and drunk with </em><em> in Vegas! </em><a href="http://search.twitter.com/search?q=%23railsconf" target="_blank"><em>#</em><strong><em>railsconf</em></strong></a></span></div>
<div><span><strong><em><br />
</em></strong></span></div>
<div><span><em>:any other old fights we can drudge up? Let&#8217;s turn RailsConf into a 1,000+ person free-for-all brawl.</em></span></div>
<div><span><em><br />
</em></span></div>
<div><span><strong><em><a href="http://twitter.com/erbmicha" target="_blank"></a><span><span style="font-weight: normal;">:really excited for </span><a href="http://twitter.com/railsconf" target="_blank"><span style="font-weight: normal;">@railsconf</span></a><span style="font-weight: normal;"> &#8211; had 4 people tell me not to lose too much money. i wasn&#8217;t aware i had a gambling problem. (denial)</span></span></em></strong></span></div>
<div><span><strong><em><span><span style="font-weight: normal;"><br />
</span></span></em></strong></span></div>
<div><span><strong><span><span style="font-weight: normal;">And , people <a href="http://railspikes.com/2008/6/27/just-say-no-to-railsconf-vegas">opposing the idea of rails</a> conf in LV will be very happy looking at these tweets but they miss a very major point which objo puts it beautifully and why our team at Vinsol is attending railsconf :</span></span></strong></span></div>
<div><span><strong><span><span style="font-weight: normal;"><br />
</span></span></strong></span></div>
<div><a href="http://twitter.com/objo" target="_blank">objo</a>: <span>But thinking about the event and all the friends I get to see and I&#8217;m stoked. Location really does not matter. Some of the brightest minds I know get together once a year in the summer. What gets discussed months ahead of time? <a href="http://search.twitter.com/search?q=%23railsconf" target="_blank">#<strong>railsconf</strong></a></span></div>
<div><span><strong><br />
</strong></span></div>
<div>As a part of rails community, I would appeal all of the people coming to railsconf09 to work hard and play harder . It&#8217;s an opportunity for all of us to show that we are one of the best  community in the world with respect for everyone and some sense of humour.  Looking forward to meet all of you</div>
<div><a href="http://www.twitter.com/the_vinsol">@the_vinsol</a></div>


<p>Related posts:<ol><li><a href='http://vinsol.com/blog/2009/05/01/5-fresh-apps-to-maximize-your-railsconf-09-experience/' rel='bookmark' title='Permanent Link: 5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience'>5+4 = 9  Fresh Apps to Maximize your RailsConf 09 Experience</a> <small>We will be again going to Rails Conf this year...</small></li><li><a href='http://vinsol.com/blog/2009/03/16/we-are-going-to-rails-conf-2009/' rel='bookmark' title='Permanent Link: We are going to Rails Conf 2009'>We are going to Rails Conf 2009</a> <small> Yes, We are going to Rails Conf this year. ...</small></li><li><a href='http://vinsol.com/blog/2009/05/05/railsconf-day-1-links-to-slides-and-blog-posts/' rel='bookmark' title='Permanent Link: RailsConf Day 1 &#8211; Links to slides and blog posts'>RailsConf Day 1 &#8211; Links to slides and blog posts</a> <small> This is the official link for all the presentation...</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/05/03/why-railsconf-at-las-vegas-is-a-great-opportunity-for-the-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
