My Gmail hangs up and is very slow what should I do?

Well if that’s the problem you are facing then its not ur fault or nothing is wrong with your pc. Something is wrong with Gmail. Especially when you are using Firefox 3.5 you are sure to face this issue unless ur lucky.

Last month when i upgraded my browser to FF 3.5 I started facing the issue and realized that the issue was with Firefox and not Gmail since it was working properly in safari and other browsers. So as usual I googled and found this http://groups.google.com/group/mozilla.support.firefox/browse_thread/thread/805c8e689b64b8d2/adf482dcb49bb423

So I came to know that I am not the only one facing the issue. Then I tried couple of suggestions given in the thread and finally I have the list and solution for solving this problem. Here are the steps which you need to follow to get things working properly.

1) Clear history, cache every thing using the Clear history option in your browser

2) Next step is open GMail go to settings and check the last option Browser connection: Select Don’t always use https. Using Https will make things secure but slow. so let Gmail manage it on its own.

3) Look if you are using Firebug (A Mozilla Addon especially used by web developers) . If you are using that Disable it dont keep it running all the time.

4) Now finally the labs section. Gmail has many new features in the lab section. Try to disable the ones you don’t need.

5) Remove all unwanted add-ons

I think thats all restart Firefox and things should be alrite. If you are still facing issues Post me a comment and I shall help you out.

Be Sociable, Share!

Background Process (threading and forking) with spawn plugin in rails

Do you have a process which takes a long amount of time before you display the result to the user? First of all make sure that your code is correct and you are following Rails standards. If thats alrite then you should do that process in background. Doing a process in background means that you start a asynchronous process as a separate process thread which keeps on running in background thus not interfering in user process. (Hope this clarifies what i mean by background process)

Now the question is how to do it and how its beneficial ??

Well by doing a background process you don’t keep a user waiting on your site. this helps the user to visit other parts of your site and since he gets faster responses he gets attached to your site and thats what you want being a website owner.

Now how to do it is the main thing. Well there are couple of plugins which claims to do this type of tasks.

BackgrounDRb

BackgroundFu

Bj

But My Favourite is SPAWN plugin availabe on http://github.com/tra/spawn/tree/master

Although the contents below are mentioned on the above link I m putting it here for your reference.

Spawn
=====

This plugin provides a 'spawn' method to easily fork OR thread
long-running sections of code so that your application can return
results to your users more quickly.This plugin works by creating new
database connections in ActiveRecord::Base for the spawned block.

The plugin also patches ActiveRecord::Base to handle some known
 bugs when using threads (see lib/patches.rb).

Usage
-----

Here's a simple example of how to demonstrate the spawn plugin.
In one of your controllers, insert this code
(after installing the plugin of course):

  spawn do
    logger.info("I feel sleepy...")
    sleep 11
    logger.info("Time to wake up!")
  end

If everything is working correctly, your controller should finish quickly
then you'll see the last log message several seconds later.

If you need to wait for the spawned processes/threads, then pass the
objects returned by spawn to Spawn::wait(), like this:

  N.times do |i|
    # spawn N blocks of code
    spawn_ids[i] = spawn do
      something(i)
    end
  end
  # wait for all N blocks of code to finish running
  wait(spawn_ids)

If you want your forked child to run at a lower priority than
the parent process, pass in the :nice option like this:

  spawn(:nice => 7) do
    do_something_nicely
  end

By default, spawn will use the fork to spawn child processes.
You can configure it to do threading either by telling the spawn
method when you call it or by configuring your environment.
For example, this is how you can tell spawn to use threading on the call,

  spawn(:method => :thread) do
    something
  end

When using the :thread setting, 
spawn will check to make sure that you have set
allow_concurrency=true in your configuration.   
If you want this setting then
put this line in one of your environment config files: 

  config.active_record.allow_concurrency = true

If it is not set, then spawn will raise an exception.

To (optionally) configure the spawn method in your configuration, 
add a line to your configuration file(s) like this:

  Spawn::method :thread

If you don't set any configuration, the :method will default to :fork.  To
specify different values for different environments, pass the environment as
the 2nd argument:

  Spawn::method :fork, 'production'
  Spawn::method :yield, 'test'

This allows you to set your production and development
environments to use different methods according to your needs.

Forking vs. Threading
---------------------

There are several tradeoffs for using threading vs. forking.
Forking was chosen as the default primarily because it requires
no configuration to get it working out of the box.

Forking advantages:
  - more reliable? - the ActiveRecord code is generally not 
    deemed to be thread-safe.
    Even though spawn attempts to patch known problems with the
    threaded implementation, there are no guarantees.
    Forking is heavier but should be fairly reliable.
  - keep running - this could also be a disadvantage,
    but you may find you want to fork
    off a process that could have a life longer than its parent.
    For example, maybe you
    want to restart your server without killing the spawned processes.
    We don't necessarily condone this (i.e. haven't tried it)
    but it's technically possible.
  - easier - forking works out of the box with spawn,
    threading requires you set allow_concurrency=true.
    Also, beware of automatic reloading of classes in
    development mode (config.cache_classes = false).

Threading advantages:
  - less filling - threads take less resources...
    how much less?  it depends.
    Some flavors of Unix are pretty efficient at forking
    so the threading advantage may not be as big as you think...
    but then again, maybe it's more than you think.  ;-)
  - debugging - you can set breakpoints in your threads

I guess now its more clear to you what is Threading,Forking & bg procee
Be Sociable, Share!

Step by Step Twitter OAuth Integration with Rails

There are many articles posted under this topic but none of them have all information or a Step by Step guide of how to integrate OAuth for use with Twitter Apps and Rails.

So thought of posting one here. Here are few steps which you should follow. The code below is same as provided by the twitter wiki but i have made couple of changes and organized it to make it simple to understand

Step 1 : = You need to get your consumer key and consumer secret # from the twitter OAuth site under this link twitteroauth.

Step 2 := Install OAuth Gem with “gem install oauth” command on ur terminal

Step 3 := Generate a Scaffold using the following command and then migrate the table called “users” to ur database

ruby script/generate scaffold user screen_name:string token:string secret:string

rake db:migrate

Step 4 := Add the following code to your User Controller. Replace the key and secret code with yours 😀

def self.consumer

# The readkey and readsecret below are the values you get during registration

OAuth::Consumer.new(“OmwO7wsjtYHjquu6bd6C4w”, “j1kZ6yzsqChkeQtToErUx2LnPQMsSPkXMkiy4F82sPA”,{ :site=>”http://twitter.com” })

end

def create

@request_token = UsersController.consumer.get_request_token

session[:request_token] = @request_token.token

session[:request_token_secret] = @request_token.secret

# Send to twitter.com to authorize

redirect_to @request_token.authorize_url

return

end

Now this is an important part where you need to set the call back url Which u will define while you register your app at twitter OAuth site. Again add this to the UserController

def callback
@request_token = OAuth::RequestToken.new(UsersController.consumer,
session[:request_token],
session[:request_token_secret])
# Exchange the request token for an access token.
@access_token = @request_token.get_access_token
@response = UsersController.consumer.request(:get, ‘/account/verify_credentials.json’,
@access_token, { :scheme => :query_string })
case @response
when Net::HTTPSuccess
user_info = JSON.parse(@response.body)
unless user_info[‘screen_name’]
flash[:notice] = “Authentication failed”
redirect_to :action => :index
return
end

# We have an authorized user, save the information to the database.
@user = User.new({ :screen_name => user_info[‘screen_name’],:token => @access_token.token,:secret => @access_token.secret })
@user.save!
# Redirect to the show page
redirect_to(@user)
else
RAILS_DEFAULT_LOGGER.error “Failed to get user info via OAuth”
# The user might have rejected this application. Or there was some other error during the request.
flash[:notice] = “Authentication failed”
redirect_to :action => :index
return
end
end
end

As you can see from the comments this callback action exchanges the request token for an access token. Since the user is going to need to type in the username and password at Twitter I avoid prompting for it and instead we fetch that using a call to verify_credentials. This saves duplicate entry and makes it easier on the user. This also prevents users with multiple accounts from giving you one username and then using another when they login to twitter. The access token and secret are what is needed to act on behalf of a user, so those are saved to the database. The show action then uses this information to display some data like so:

def show
@user = User.find(params[:id])
# Get this users favorites via OAuth
@access_token = OAuth::AccessToken.new(UsersController.consumer, @user.token, @user.secret)
RAILS_DEFAULT_LOGGER.error “Making OAuth request for #{@user.inspect} with #{@access_token.inspect}”
@response = UsersController.consumer.request(:get, ‘/favorites.json’, @access_token,
{ :scheme => :query_string })
case @response
when Net::HTTPSuccess
@favorites = JSON.parse(@response.body)
respond_to do |format|
format.html # show.html.erb
end
else
RAILS_DEFAULT_LOGGER.error “Failed to get favorites via OAuth for #{@user}”
# The user might have rejected this application. Or there was some other error during the request.
flash[:notice] = “Authentication failed”
redirect_to :action => :index
return
end

Finally the views

<p>
<b>Screen name:</b>
<%=h @user.screen_name %>
</p>
<ul>
<% @favorites.each do |fav| %>
<li><b><%= fav[‘user’][‘screen_name’]  %></b>: <%=h fav[‘text’]  %></li>
<% end %>
</ul>

and

the new.html.erb

<h1>New user</h1>

<% form_for(@user) do |f| %>
<%= f.error_messages %>
<p>
We’ll be sending you to Twitter in a moment to login and grant us access.
Once you allow us in we’ll give you the super-cool feature
you’bve heard about.
</p>
<p>
<%= f.submit “Grant Access” %>
</p>
<% end %>
<%= link_to ‘Back’, users_path %>

Also Add validates_presence_of to the User model for screen_name, token and secret.

And in the routes.rb set the following route

map.connect ‘/callback’, :controller => ‘users’, :action => ‘callback’

Thats it you are ready for the twitter Login. Start the server and open localhost:3000/users
and you will see the magic.

These are all the steps. Post me a comment if you still face any isssues.

Please note : – This method might not function correctly now since the method of authentication has changed. Thanks

Be Sociable, Share!

File column plugin not working with rails 2.2

Older version of file_coulmn plugin is not working in rails 2.2.

If you want to get working in rails 2.2 then you need to modify file_coulmn.rb file.

Update the line #619 in vendor/plugins/file_column/lib/file_column.rb from

Inflector.underscore(self.name).to_s,
to
ActiveSupport::Inflector.underscore(self.name).to_s,

Or you can download the latest plugin from the github.com: http://github.com/rust/file_column/

If you are looking to implement the old File column plugin you may visit

http://blog.dhavalparikh.co.in/2008/02/file-column-plugin/

Be Sociable, Share!

Google Charts in Rails (gc4r)

Well I m going to cover the topic how to generate charts using rails. there are number of options available such as follows

Here are the plugins through which we can generate charts in rails

1) Gruff charts http://nubyonrails.com/articles/gruff-graphing-library-for-ruby

2) Sparklines http://nubyonrails.com/articles/sparklines-graph-library-for-ruby

3) Scruffy charts http://scruffy.rubyforge.org/

4) Ziya plugin http://liquidrail.com/2007/1/4/charting-the-rails/ (flash charts)

I found google charts the best of these..( ofcourse that suited my requirements). The gc4r plugin in rails is really helpful for easy integration of google charts in your rails application.

Here is how Charts are generated by Google API.

Install: ruby script/plugin install http://gc4r.googlecode.com/svn/trunk/

Supported features:
1.line chart
2.bar chart (vertical and horizontal)
3.pie chart (both 2D and 3D)
4.title, title color and size
5.data colors and legend
6.data scaling
7.multiple axis

#Controller
use_google_charts

#In method of controller

Default Chart or Hello World Chart
@chart = GoogleChart.new

Set the width of chart
@chart = GoogleLineChart.new :width => 300, :height => 200

Set the data
dataset = GoogleChartDataset.new :data => [10,50,4,10,16]
data = GoogleChartData.new :datasets => dataset
@chart = GoogleLineChart.new :width => 300, :height => 200
@chart.data = data

add a chart title
dataset = GoogleChartDataset.new :data => [10,50,4,10,16]
data = GoogleChartData.new :datasets => dataset
@chart = GoogleLineChart.new :width => 200, :height => 150, :title => ‘Java vs. Ruby Montly Job Opportunities’
@chart.data = data

Set title in array instead of string
dataset = GoogleChartDataset.new :data => [10,50,4,10,16]
data = GoogleChartData.new :datasets => dataset
@chart = GoogleLineChart.new :width => 200, :height => 150, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data

Multiple data in chart
dataset1 = GoogleChartDataset.new :data => [10,50,4,10,16]
dataset2 = GoogleChartDataset.new :data => [99, 81, 25, 54, 80]
data = GoogleChartData.new :datasets => [dataset1, dataset2]
@chart = GoogleLineChart.new :width => 200, :height => 150, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data

Add colors
dataset1 = GoogleChartDataset.new :data => [10,50,4,10,16],:color => ‘FF0000?
dataset2 = GoogleChartDataset.new :data =>[99,81,25,54,80],:color => ‘0000FF’
data = GoogleChartData.new :datasets => [dataset1, dataset2]
@chart = GoogleLineChart.new :width => 200, :height => 150, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data

Define legend
dataset1 = GoogleChartDataset.new :data =>[10,50,4,10,16],:color => ‘FF0000?, :title => ‘Java’
dataset2 = GoogleChartDataset.new :data=>[99,81,25,54,80],:color => ‘0000FF’, :title => ‘Ruby’
data = GoogleChartData.new :datasets => [dataset1, dataset2]
@chart = GoogleLineChart.new :width => 200, :height => 150, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data

Define Axis
dataset1 = GoogleChartDataset.new :data =>[10,50,4,10,16],:color => ‘FF0000?, :title => ‘Java’
dataset2 = GoogleChartDataset.new :data=>[99,81,25,54,80],:color => ‘0000FF’, :title => ‘Ruby’
data = GoogleChartData.new :datasets => [dataset1, dataset2]
axis = GoogleChartAxis.new :axis  => [GoogleChartAxis::LEFT, GoogleChartAxis::BOTTOM]
@chart = GoogleLineChart.new :width => 250, :height => 150, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data
@chart.axis = axis

Define Right and X Axis
dataset1 = GoogleChartDataset.new :data=> [10,50,4,10,16],:color => ‘FF0000?,  :title => ‘Java’
dataset2 = GoogleChartDataset.new :data=>[99,81,25,54,80],:color => ‘0000FF’, :title => ‘Ruby’
data = GoogleChartData.new :datasets => [dataset1, dataset2]
axis = GoogleChartAxis.new :axis  => [GoogleChartAxis::LEFT, GoogleChartAxis::BOTTOM,  GoogleChartAxis::RIGHT, GoogleChartAxis::BOTTOM]
@chart = GoogleLineChart.new :width => 300, :height => 200, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]
@chart.data = data
@chart.axis = axis

Define Bar Chart:
@chart = GoogleBarChart.new :width => 300, :height => 200, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’]

Define 3D Pie Chart:
@chart = GooglePieChart.new :width => 400, :height => 200, :title => [‘Java vs. Ruby’, ‘Montly Job Opportunities’], :chart_type  => GooglePieChart::PIE_3D

#view:
<%= image_tag @chart.to_url %>

Be Sociable, Share!

Export data to Excel (xls) in Ruby on Rails

The code Below will help to export the data in excel in Ruby on Rails

#Controller

class UserController < ApplicationController
  def export
    headers['Content-Type'] = "application/vnd.ms-excel"
    headers['Content-Disposition'] = 'attachment; filename="report.xls"'
    headers['Cache-Control'] = ''
    @users = User.find(:all)
  end

#View

export.html.erb

<%= link_to "Export as Excel", export_person_url %>

_report.html.erb

<table border="1">
  <tr>
    <th>Name</th>
  </tr>
  <% @users.each do |u| %>
  <tr>
   <td><%= u.name %></td>
  <% end %>
 </tr>
</table>

Please note :- This method might might be deprecated. You may visit http://spreadsheet.rubyforge.org/ for more info. Thanks

Be Sociable, Share!
1 4 5 6 7 8 23