<?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>KaveriTech Technical Blog</title>
	<atom:link href="http://techblog.kaveritech.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.kaveritech.com</link>
	<description>Findings, Tips &#38; Tricks</description>
	<lastBuildDate>Tue, 25 May 2010 12:48:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Date and Time formatting in Rails</title>
		<link>http://techblog.kaveritech.com/2010/05/25/date-and-time-formatting-in-rails/</link>
		<comments>http://techblog.kaveritech.com/2010/05/25/date-and-time-formatting-in-rails/#comments</comments>
		<pubDate>Tue, 25 May 2010 12:48:58 +0000</pubDate>
		<dc:creator>Swanand</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[string-formatting]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=549</guid>
		<description><![CDATA[Here is a quick reference to default in-built formatting options available in Ruby on Rails:

If you need anymore formatting support, then strftime is your friend. Since the examples listed above are realized using the same strftime method.
]]></description>
			<content:encoded><![CDATA[<p>Here is a quick reference to default in-built formatting options available in Ruby on Rails:</p>
<p><script src="http://gist.github.com/413074.js?file=date_and_time.rb"></script></p>
<p>If you need anymore formatting support, then <em><a title="RubyDoc" href="http://ruby-doc.org/core/classes/Time.html#M000298" target="_blank">strftime</a></em> is your friend. Since the examples listed above are realized using the same <em>strftime</em> method.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/25/date-and-time-formatting-in-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phusion Passenger + Apache Setup for Rails Apps</title>
		<link>http://techblog.kaveritech.com/2010/05/24/phusion-passenger-apache-setup-for-rails-apps/</link>
		<comments>http://techblog.kaveritech.com/2010/05/24/phusion-passenger-apache-setup-for-rails-apps/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:59:25 +0000</pubDate>
		<dc:creator>Swanand</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Phusion-Passenger]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Virtual-Host]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=532</guid>
		<description><![CDATA[Here is a short quick tutorial that can help you setup your Apache to sever application through Passenger, instead of Mongrel Cluster. You need the following (Both come with superb installers, that you can easily follow):

Install Ruby Enterprise Edition (Optional) (Recommended)
Install Phusion Passenger

Once you have gone through the steps listed here, you will prompted to [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a short quick tutorial that can help you setup your Apache to sever application through Passenger, instead of Mongrel Cluster. You need the following (Both come with superb installers, that you can easily follow):</p>
<ul>
<li>Install Ruby Enterprise Edition <del datetime="2010-05-24T13:19:36+00:00">(Optional)</del> (Recommended)</li>
<li>Install Phusion Passenger</li>
</ul>
<p>Once you have gone through the steps listed <a href="http://www.modrails.com/install.html">here</a>, you will prompted to configure Apache through config files. Here is what you need to do:</p>
<ol>
<li> Enable the mod_rails module:<br />
<code><br />
LoadModule passenger_module /path/to/passenger/module/mod_passenger.so<br />
PassengerRoot /path/to/passenger/source/root/passenger-2.2.11<br />
PassengerRuby /path/to/ruby/executable/generally/ree/ruby<br />
</code><br />
In my case (since I use <a href="http://rvm.beginrescueend.com/">RVM</a>):<br />
<code><br />
LoadModule passenger_module /Users/swanand/.rvm/gems/ree-1.8.7-2010.01/gems/passenger-2.2.11/ext/apache2/mod_passenger.so<br />
PassengerRoot /Users/swanand/.rvm/gems/ree-1.8.7-2010.01/gems/passenger-2.2.11<br />
PassengerRuby /Users/swanand/.rvm/rubies/ree-1.8.7-2010.01/bin/ruby<br />
</code></li>
<li> Create a virtual server for your application (Recommended way)<br />
Find your Apache configuration file. Commonly known locations:</p>
<ul>
<li>(Fedora &amp; Redhat based OS) <span style="color: #3366ff;">/etc/httpd/conf.d/httpd.conf</span></li>
<li>(Mac OS X) <span style="color: #3366ff;">/etc/apache2/httpd.conf</span></li>
<li>(Ubuntu and Debian based OS) <span style="color: #3366ff;">/etc/apache2/apache2.conf</span></li>
</ul>
<p>In this file, find the line that includes other conf files. Something like:</p>
<blockquote><p>Include /private/etc/apache2/other/*.conf</p></blockquote>
<p>Now, create a file in this <strong>/private/etc/apache2/other/</strong>, name it application_name.conf</p>
<p>Following are the contents of this file:<br />
<script src="http://gist.github.com/411892.js?file=my_rails_app.conf"></script><br />
Update the /somewhere according to your project path.
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/24/phusion-passenger-apache-setup-for-rails-apps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPhone: How to set a custom background for the navigation bar</title>
		<link>http://techblog.kaveritech.com/2010/05/23/iphone-how-to-set-a-custom-background-for-the-navigation-bar/</link>
		<comments>http://techblog.kaveritech.com/2010/05/23/iphone-how-to-set-a-custom-background-for-the-navigation-bar/#comments</comments>
		<pubDate>Sun, 23 May 2010 15:25:34 +0000</pubDate>
		<dc:creator>Satish Natarajan</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=530</guid>
		<description><![CDATA[Just add this section to the top of your app delegate
@implementation UINavigationBar(MyCustomBackground)
- (void)drawRect:(CGRect)r
{
	[[UIImage imageNamed:@"header.png"] drawInRect:self.bounds];
}
@end
]]></description>
			<content:encoded><![CDATA[<p>Just add this section to the top of your app delegate</p>
<p>@implementation UINavigationBar(MyCustomBackground)<br />
- (void)drawRect:(CGRect)r<br />
{<br />
	[[UIImage imageNamed:@"header.png"] drawInRect:self.bounds];<br />
}<br />
@end</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/23/iphone-how-to-set-a-custom-background-for-the-navigation-bar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone: How to set a custom image for a navigation bar button</title>
		<link>http://techblog.kaveritech.com/2010/05/20/iphone-how-to-set-a-custom-image-for-a-navigation-bar-button/</link>
		<comments>http://techblog.kaveritech.com/2010/05/20/iphone-how-to-set-a-custom-image-for-a-navigation-bar-button/#comments</comments>
		<pubDate>Fri, 21 May 2010 07:36:48 +0000</pubDate>
		<dc:creator>Satish Natarajan</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=528</guid>
		<description><![CDATA[UIButton *simpleButton = [[UIButton alloc] init];
UIImage *buttomImage = [UIImage imageNamed:@"button.png"];
[simpleButton setImage: buttomImage forState:UIControlStateNormal];
simpleButton.frame = CGRectMake(0, 0, buttomImage.size.width, buttomImage.size.height);
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:simpleButton];
]]></description>
			<content:encoded><![CDATA[<p>UIButton *simpleButton = [[UIButton alloc] init];<br />
UIImage *buttomImage = [UIImage imageNamed:@"button.png"];<br />
[simpleButton setImage: buttomImage forState:UIControlStateNormal];<br />
simpleButton.frame = CGRectMake(0, 0, buttomImage.size.width, buttomImage.size.height);<br />
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:simpleButton];</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/20/iphone-how-to-set-a-custom-image-for-a-navigation-bar-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: OpenGL &#8211; Rendering rectangles</title>
		<link>http://techblog.kaveritech.com/2010/05/19/android-opengl-rendering-rectangles/</link>
		<comments>http://techblog.kaveritech.com/2010/05/19/android-opengl-rendering-rectangles/#comments</comments>
		<pubDate>Wed, 19 May 2010 20:30:03 +0000</pubDate>
		<dc:creator>Satish Natarajan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=525</guid>
		<description><![CDATA[package com.kaveri.sample.opengl;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;
public class VortexRenderer implements GLSurfaceView.Renderer {
    private float _red = 0f;
    private float _green = 0f;
    private float _blue = 0f;
    // a raw buffer to hold indices allowing a reuse of points.
   [...]]]></description>
			<content:encoded><![CDATA[<p>package com.kaveri.sample.opengl;</p>
<p>import java.nio.ByteBuffer;<br />
import java.nio.ByteOrder;<br />
import java.nio.FloatBuffer;<br />
import java.nio.ShortBuffer;</p>
<p>import javax.microedition.khronos.egl.EGLConfig;<br />
import javax.microedition.khronos.opengles.GL10;</p>
<p>import android.opengl.GLSurfaceView;</p>
<p>public class VortexRenderer implements GLSurfaceView.Renderer {</p>
<p>    private float _red = 0f;<br />
    private float _green = 0f;<br />
    private float _blue = 0f;</p>
<p>    // a raw buffer to hold indices allowing a reuse of points.<br />
    private ShortBuffer _indexBuffer;</p>
<p>    // a raw buffer to hold the vertices<br />
    private FloatBuffer _vertexBuffer0;<br />
    private FloatBuffer _vertexBuffer1;<br />
    private FloatBuffer _vertexBuffer2;<br />
    private FloatBuffer _vertexBuffer3;<br />
    private FloatBuffer _vertexBuffer4;</p>
<p>    private short[] _indicesArray = {0, 1, 2, 3, 4};</p>
<p>    private float[] _verticesArray0 = {<br />
            0f, 0f, 0f,<br />
            0.1f, 0f, 0f,<br />
            0.1f, 0.1f, 0f,<br />
            0f, 0.1f, 0f<br />
        };</p>
<p>    private float[] _verticesArray1 = {<br />
            0f, 0f, 0f,<br />
            0.2f, 0f, 0f,<br />
            0.2f, 0.2f, 0f,<br />
            0f, 0.2f, 0f<br />
        };<br />
    private float[] _verticesArray2 = {<br />
            0f, 0f, 0f,<br />
            0.3f, 0f, 0f,<br />
            0.3f, 0.3f, 0f,<br />
            0f, 0.3f, 0f<br />
        };<br />
    private float[] _verticesArray3 = {<br />
            0f, 0f, 0f,<br />
            0.4f, 0f, 0f,<br />
            0.4f, 0.4f, 0f,<br />
            0f, 0.4f, 0f<br />
        };<br />
    private float[] _verticesArray4 = {<br />
            0f, 0f, 0f,<br />
            0.5f, 0f, 0f,<br />
            0.5f, 0.5f, 0f,<br />
            0f, 0.5f, 0f<br />
        };</p>
<p>    @Override<br />
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {<br />
        // preparation<br />
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);<br />
        initTriangle();<br />
    }</p>
<p>    @Override<br />
    public void onSurfaceChanged(GL10 gl, int w, int h) {<br />
        gl.glViewport(0, 0, w, h);<br />
    }</p>
<p>    @Override<br />
    public void onDrawFrame(GL10 gl) {<br />
        // define the color we want to be displayed as the &#8220;clipping wall&#8221;<br />
        gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f);<br />
        // clear the color buffer to show the ClearColor we called above&#8230;<br />
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);</p>
<p>        gl.glLineWidth(2f);</p>
<p>        gl.glColor4f(_red, _green, _blue, 0f);<br />
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer0);<br />
        gl.glDrawElements(GL10.GL_LINE_LOOP, 4 , GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer1);<br />
        gl.glDrawElements(GL10.GL_LINE_LOOP, 4 , GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer2);<br />
        gl.glDrawElements(GL10.GL_LINE_LOOP, 4 , GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer3);<br />
        gl.glDrawElements(GL10.GL_LINE_LOOP, 4 , GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer4);<br />
        gl.glDrawElements(GL10.GL_LINE_LOOP, 4 , GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />
    }<br />
    protected static FloatBuffer makeFloatBuffer(float[] arr)<br />
    {<br />
        ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);<br />
        bb.order(ByteOrder.nativeOrder());<br />
        FloatBuffer fb = bb.asFloatBuffer();<br />
        fb.put(arr);<br />
        fb.position(0);<br />
        return fb;<br />
    }</p>
<p>    protected static ShortBuffer makeShortBuffer(short[] arr)<br />
    {<br />
    	ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 2);<br />
        bb.order(ByteOrder.nativeOrder());<br />
        ShortBuffer sb = bb.asShortBuffer();<br />
        sb.put(arr);<br />
        sb.position(0);<br />
        return sb;<br />
    }</p>
<p>    private void initTriangle() {     </p>
<p>        _vertexBuffer0 = makeFloatBuffer(_verticesArray0);<br />
        _vertexBuffer1 = makeFloatBuffer(_verticesArray1);<br />
        _vertexBuffer2 = makeFloatBuffer(_verticesArray2);<br />
        _vertexBuffer3 = makeFloatBuffer(_verticesArray3);<br />
        _vertexBuffer4 = makeFloatBuffer(_verticesArray4);<br />
        _indexBuffer = makeShortBuffer(_indicesArray);<br />
    }</p>
<p>    public void setColor(float r, float g, float b) {<br />
        _red = r;<br />
        _green = g;<br />
        _blue = b;<br />
    }<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/19/android-opengl-rendering-rectangles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone/iPad: How to set TextView Font Size</title>
		<link>http://techblog.kaveritech.com/2010/05/14/iphoneipad-how-to-set-textview-font-size/</link>
		<comments>http://techblog.kaveritech.com/2010/05/14/iphoneipad-how-to-set-textview-font-size/#comments</comments>
		<pubDate>Fri, 14 May 2010 19:15:11 +0000</pubDate>
		<dc:creator>Satish Natarajan</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=523</guid>
		<description><![CDATA[myTextView.font = [UIFont fontWithName:@"Arial" size:12];
]]></description>
			<content:encoded><![CDATA[<p>myTextView.font = [UIFont fontWithName:@"Arial" size:12];</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/05/14/iphoneipad-how-to-set-textview-font-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: Duplicate elements of an Array</title>
		<link>http://techblog.kaveritech.com/2010/04/26/ruby-duplicate-elements-of-an-array/</link>
		<comments>http://techblog.kaveritech.com/2010/04/26/ruby-duplicate-elements-of-an-array/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 11:29:53 +0000</pubDate>
		<dc:creator>satya</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[duplicate]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=519</guid>
		<description><![CDATA[The following code lists out the duplicate elements of any Array:

]]></description>
			<content:encoded><![CDATA[<p>The following code lists out the duplicate elements of any Array:</p>
<p><script src="http://gist.github.com/379204.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/04/26/ruby-duplicate-elements-of-an-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OAuth Authorization</title>
		<link>http://techblog.kaveritech.com/2010/04/24/oauth-authorization/</link>
		<comments>http://techblog.kaveritech.com/2010/04/24/oauth-authorization/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 04:00:59 +0000</pubDate>
		<dc:creator>nitya</dc:creator>
				<category><![CDATA[authorization]]></category>
		<category><![CDATA[oauth]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=511</guid>
		<description><![CDATA[OAuth is a simple and secure way to authorize the user on behalf of another application where user is already registered.
OAuth include communication between two applications &#8211; consumer application, the application which uses OAuth authorization; service provider application, application who provides OAuth service. Using OAuth we can have access to the protected data of user [...]]]></description>
			<content:encoded><![CDATA[<p>OAuth is a simple and secure way to authorize the user on behalf of another application where user is already registered.</p>
<p>OAuth include communication between two applications &#8211; consumer application, the application which uses OAuth authorization; service provider application, application who provides OAuth service. Using OAuth we can have access to the protected data of user from the service provider application. So first step towards implementing OAuth is to register with the OAuth service provider and get the token  key and secret key.</p>
<p>How OAuth authorization works,</p>
<ol>
<li>The consumer application sends a request to the OAuth service provider for a &#8216;request token&#8217; with parameters as &#8216;token key&#8217; and &#8217;secret key&#8217;.</li>
<li> Once we have &#8216;request token&#8217;, we request the user for Approval from service provider application. Basically this happens with a redirect of user to the service provider application&#8217;s login page, with the &#8216;request token&#8217; as parameter.</li>
<li>If the user is approved, the service provider application makes a callback to the consumer application with &#8216;authorized key&#8217;.</li>
<li>Once we have &#8216;authorized key&#8217;, we can request the service provider for &#8216;access token&#8217;.</li>
</ol>
<p>Nice, now the user is authorized using the service provider application.</p>
<p>Reference: <a title="http://hueniverse.com/oauth/" href="http://hueniverse.com/oauth/" target="_blank">http://hueniverse.com/oauth/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/04/24/oauth-authorization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone: NSLog Warning &#8211; format not a string literal and no format arguments</title>
		<link>http://techblog.kaveritech.com/2010/04/07/iphone-nslog-warning-format-not-a-string-literal-and-no-format-arguments/</link>
		<comments>http://techblog.kaveritech.com/2010/04/07/iphone-nslog-warning-format-not-a-string-literal-and-no-format-arguments/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 13:12:27 +0000</pubDate>
		<dc:creator>Satish Natarajan</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=509</guid>
		<description><![CDATA[When you are using NSLog(string_variable) &#8211; you will get an error format not a string literal. 
eg:
NSString *message = @&#8221;My message is 100% &#8220;;
NSLog(message);
To avoid the warning &#8211; which is infact correct andmisbehaving of the NSLog statement by dynamic string with characters like % etc. It is better to write the NSLog statements as follows
NSLog(@&#8221;%@&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>When you are using NSLog(string_variable) &#8211; you will get an error format not a string literal. </p>
<p>eg:<br />
NSString *message = @&#8221;My message is 100% &#8220;;<br />
NSLog(message);</p>
<p>To avoid the warning &#8211; which is infact correct andmisbehaving of the NSLog statement by dynamic string with characters like % etc. It is better to write the NSLog statements as follows</p>
<p>NSLog(@&#8221;%@&#8221;, message);</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/04/07/iphone-nslog-warning-format-not-a-string-literal-and-no-format-arguments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>smtp_tls with ruby 1.8.7 &#8211; wrong number of arguments (3 for 2) error</title>
		<link>http://techblog.kaveritech.com/2010/03/31/smtp_tls-with-ruby-1-8-7-wrong-number-of-arguments-3-for-2-error/</link>
		<comments>http://techblog.kaveritech.com/2010/03/31/smtp_tls-with-ruby-1-8-7-wrong-number-of-arguments-3-for-2-error/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 18:43:11 +0000</pubDate>
		<dc:creator>varma</dc:creator>
				<category><![CDATA[Emails]]></category>
		<category><![CDATA[ruby 1.8.7]]></category>
		<category><![CDATA[smpt_tls]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://techblog.kaveritech.com/?p=505</guid>
		<description><![CDATA[smtp_tls comes along with ruby 1.8.7and works fine
but you need to tweek a little to get it working
here are the steps
edit line 33 of vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb
#check_auth_args user, secret, authtype if user or secret
if RUBY_VERSION &#62; "1.8.6"
  check_auth_args user, secret # for rails 1.8.7
else
  check_auth_args user, secret, authtype if user or secret # for rails [...]]]></description>
			<content:encoded><![CDATA[<p>smtp_tls comes along with ruby 1.8.7and works fine</p>
<p>but you need to tweek a little to get it working</p>
<p>here are the steps</p>
<p>edit line 33 of vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb</p>
<pre>#check_auth_args user, secret, authtype if user or secret
if RUBY_VERSION &gt; "1.8.6"
  check_auth_args user, secret # for rails 1.8.7
else
  check_auth_args user, secret, authtype if user or secret # for rails 1.8.6
end

read more : http://blog.inspired.no/smtp-error-while-using-gmail-in-rails-271</pre>
]]></content:encoded>
			<wfw:commentRss>http://techblog.kaveritech.com/2010/03/31/smtp_tls-with-ruby-1-8-7-wrong-number-of-arguments-3-for-2-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
