Simple Captcha reloaded

Hi all,

After really long time, I have started the further development for enhancements on the plugin Simple Captcha. Keep an eye here… You will gonna find nice things. I have some really required, useful and cool things to implement and get it to the version 2.0 with all things incorporated in that. There are a lot of things to be committed by the version 2.0… meanwhile there will be 1.x versions with one-two features added in each version.

I am also planning to move the homepage as a separate page from a simple blog post… So, that it can be a centralized page for the reference.

Filed in: simple_captcha

by: sur

8 Comments

Rails Hackfest August-07 Results


Hackfest Winners

Filed in: hackfest, rails, ror, ruby, rubyonrails

by: sur

2 Comments

Rails Hackfest August-07

I participated in August Rails Hackfest which was a great experience.
You can see the missing August 2007 from the Post Archives. I didn’t post anything last month as I was busy in submitting rails patches. I submitted a lot of patches out of which I got one patch committed to the rails code under changeset 7362 which was about optimizing the code of ActiveRecord Validation validates_presence_of filed under the ticket 9392. Me and kampers got a collaborated patch accepted under the changeset 7383 which was a tiny patch for improving documentation of Action Controller filed under the ticket 9454. Many of my patches got rejected as well by the more experienced Rails Contributors but still, many patches are there to be analyzed by the Rails Core Team.

As I got my code embedded in the Rails Core, I am proud to be recognized as Rails Core Contributor. Tarmo was one of the most active and really appreciable contributor in August Rails Hackfest. Because of this participation I paid very less attention to the other important things including the clients’ projects as well :D. Moreover in the middle of the month I needed to go out to give Rails Training to a really enthusiastic team of a Bangalore based company. It was lovely experience there, but I got out of touch from the Hackfest for those crucial 5 days. After returning back I tried to keep the pace again. I am desperately waiting for the result of the August Rails Hackfest which might get published in a day or two. The first prize is the Entry Pass to the RailsConfEurope. I am looking for submitting more patches now onwards but not with the same pace as of last month, coz I will not be participating in the Hackfest but keeping the spirit of Rails Core Contributor and the pay back policy of open source. I will also be releasing some rails plugins and probably a ruby gem as well this month.

Have you tried this..
[source:ruby]
Object === Class == Class === Object
[/source]

Filed in: hackfest, rails, ror, ruby, rubyonrails

by: sur

5 Comments

Second delhi.rb meetup - Some Advance Ruby Skills

Hey Everyone,
Vinsol is proudly taking charge to spread Rubyism in delhi and to grow the Ruby & Rails communities here in New Delhi, India. We are organizing delhi.rb meetups around once every month, the meetup is all about ruby and rails as well. The meetup was on 19th July 2007 was our second meetup, first was on 22nd June 2007.

Manik presenting SOLR
Manik presenting SOLR


Me presenting Some Advance Ruby Skills
Me presenting Some Advance Ruby Skills

More photos here.

It was really a nice experience attending the meetup, sharing the ruby/rails thoughts and upcoming features. It helps keeping yourself up-to-date with the latest trends in this technology domain at least in Ruby and Rails(what else m talking except ruby :D). So, there were two presentations in the meetup — first Manik presented Full text search implementation for Rails using SOLR(it was really an interesting presentation, i got SOLR learning for free, thanks Manik :)), second I presented Some Advance Ruby Skills which i am going to share in this post too. Though in the first meetup I presented Caching on RubyOnRails but i haven’t posted here…

Some Advance Ruby Skills

1.) Everything is object

A popular phrase about Ruby, “Everything is Object”. At the root of the ruby it is Object. Everything we define in ruby is object. Even the classes we define are actually object. A class defined with class ClassName; end is actually an object of the class Class.
The Object keeps the record of whatever class or module we define. We can justify it as
[source:ruby]
class Klass
end
Object.constants.include?(”Klass”) # => true
[/source]

2.) module_eval

Use module_eval to define instance and class methods of a class at runtime, when you are outside the class.
example 1
defining an instance method
[source:ruby]
class C
end

C.module_eval do
define_method :wish do
p “hello instance method”
end
end

c = C.new
c.wish # => hello instance method
[/source]
example 2
defining a class method
[source:ruby]
class C
end

C.module_eval do
class << self
define_method :wish do
p "hello class method"
end
end
end

C.wish # => hello class method
[/source]
example 3
another form of using module_eval
when method body is available as a String object
[source:ruby]
class D
class << self
def method_body
ret =<<-EOS
def wish
p "hello, supplied as String object"
end
EOS
end
end

class C
end

c = C.new

c.class.module_eval(D.method_body)

c.wish # => hello, supplied as String object
end
[/source]

3.) alias_method

It is NOT method call delegation but insertion of customized functionalities on a specific method call.
[source:ruby]
class C

def wish
p “hello”
end

end

c = C.new
c.wish # hello

class D

class << self
def keep_some_record
p "I am keeping some records"
end
end

end

# aliasing the wish method

c.class.module_eval do

alias_method :wish_orig, :wish

define_method :wish do
D.keep_some_record
wish_orig
end

end

c.wish # I am keeping some records; hello
[/source]

4.) The Anonymous class

I just presented same a la this post

5.) send

Calling a method when method name is stored as a string object in a variable i.e. you can not see which method to call.
example 1
when method name is simply stored as a String object
[source:ruby]
class C
def wish
p “hello DELHI.rb”
end
end
a = “wish”
c = C.new
c.send(a)
[/source]
example 2
making set method at runtime
[source:ruby]
class C
attr_accessor :name
end

c = C.new

a = “name”

c.send(a + “=”, “SUR MAX”)

p c.send(a)
[/source]
example 3
this is interesting, when attribute name itself is send
[source:ruby]
class C
attr_accessor :send
end

c = C.new

a = “send”

c.__send__(a + “=”, “SUR MAX”)

p c.__send__(a) # => Sur Max
[/source]
well, don’t say “what if attribute name is __send__” :P

6.) The Method class

Methods of the class are objects of the Method class when retrieved with the method method and can be called with the method call.
example 1
anything we define with def-end is an object of the class Method
[source:ruby]
class C
def wish
p “hello”
end
end

c = C.new

m1 = c.method(”wish”)

p m1.class # => Method

m1.call # => hello
[/source]
example 2
method can hold the object’s reference and associated instance variables
[source:ruby]
class C
attr_accessor :name

def initialize(name)
self.name = name.to_s
end

def wish
p “hello ” + name.to_s
end
end

c = C.new(”Sur Max”)

m1 = c.method(”wish”)
m1.call # => hello Sur Max
[/source]
example 3
we are able to let this method object flow throughout the application code and let it available anywhere in the code.
[source:ruby]
class C
attr_accessor :name

def initialize(name)
self.name = name.to_s
end

def wish
p “hello ” + name.to_s
end

def self.supply_wish
c = new(”Sur Max”)
return c.method(”wish”)
end

end

C.supply_wish.call # => hello Sur Max
[/source]

7.) what is “self”

I just presented a la this post

8.) Single Method Delegation - using Forwardable

Allows you to delegate named method calls to other objects.
[source:ruby]
require ‘forwardable’

class C
extend Forwardable

attr_accessor :h

def initialize
@h = {}
end

def_delegator(:@h, :[], :show)
def_delegator(:@h, :[]=, :add)

end

end

c = C.new

c.add(1, “asdf”)

p c.show(1)

p c.h
[/source]
Notice the beauty of ruby here… The methods [], []= of a hash object are usually called as
[source:ruby]
h = {}
h["key"] # this will return the corresponding value
h["key"] = “value” # this will set the “value” corresponding to the “key”
[/source]
BUT in the above delegation code we are calling them as(delegating the method call on them as)
[source:ruby]
h = {}
h.[](”key”) # this will return the corresponding value
h.[]=(”key”, “value”) # this will set the “value” corresponding to the “key”
[/source]

9.) Full class Delegation - using Delegator

Extending an object(instance of Class) with the capabilities of another.
[source:ruby]
require ‘delegate’

class Words < DelegateClass(Array)

def initialize(list = "one two three four")
super(list.split)
end

end

w = Words.new

p w # => ["one", "two", "three", "four"]

p w.length # => 4

[/source]

10.) SimpleDelegator

Write memory optimized code with SimpleDelegator…
[source:ruby]
require ‘delegate’

a = SimpleDelegator.new([10, 20])

old_id = a.__id__

b = a

a.__setobj__(”a new object”) # this is not possible otherwise with the method “replace” which can replace only object of same class on same memory location

new_id = a.__id__

p a # => “a new object”
p b # => “a new object”

p new_id == old_id # => true
[/source]

Filed in: advance_ruby, classes, delegation, delhi.rb, duck typing, metaprogramming, rails, ror, ruby, rubyonrails

by: sur

4 Comments

How to make arrow keys working in irb in Linux/Ubuntu

It was ruining all my mood and concentration when i was trying some sample ruby code in irb and again and again i had to retype the things because the arrow keys were not working there. I searched the problem on net and found that i need to have readline library on my linux and in ruby as well. Now the point is readline should be available on the linux before you compile ruby so as you can give the readline option while compiling ruby. BUT we have ruby already installed !! Now What ?

Now, first you will need to install system based readline libraries as

[source:ruby]
sudo apt-get install libreadline5 libreadline5-dev
[/source]

If you are not able to install linux based readline with the above method the refer this for more details.

Now you will need to compile the ruby based readline interface to let you readline library available in irb.
Do it by this…

[source:ruby]
cd /usr/local/src/ruby-1.8.6/ext/readline
sudo ruby extconf.rb
sudo make
sudo make install
[/source]

thats it, all done!!
Try your tips on arrow keys in irb, it should work now.
enjoy!!

Filed in: feisty fawn, irb, linux, rails, ruby, ubuntu

by: sur

5 Comments

How to install RMagick Gem on Linux/Ubuntu

While installing RMagick on Linux, if you are getting errors like this
“GraphicsMagick-config… no configure: error: Can’t install RMagick. Can’t find Magick-config or GraphicsMagick-config program. …”,
below is the solution for this error.

RMagick requires ImageMagick and which further requires loads of dependencies already available to get installed and work properly. I was figuring out of those all, and thank god got a quite simple and elegant way to do all that in just three commands.
First you will have to install imagemagick then libmagick9-dev and then finally you can install rmagick.

Here are the commands…

[source:ruby]
sudo apt-get install imagemagick
sudo apt-get install libmagick9-dev
sudo gem install rmagick
[/source]

Filed in: feisty fawn, gem, linux, rails, ror, ruby, rubyonrails, ubuntu

by: sur

12 Comments

GUI based FTP client for Ubuntu FeistyFawn

Working on command line SSH is quite natural but FTP is a bit heck.
I found it hard to work on command line FTP for my godaddy account specially for removing the remote files and uploading the directories. I found the gFTP very much useful GUI based Ftp client. You can install it from the console by issuing this command…

[source:ruby]
sudo apt-get install gftp
[/source]

After successful installation we can launch the gFTP application from the menu Applications->Internet->gFtp.

We can launch the application from the command line as sudo gftp

In the GUI of gFTP we will required to provide the information of Host, Port, User and Pass… In host we need to give the IP address of the remote machine, we can do it better by adding the IP-Alias entry on the system… From the menu select System->Administration->Network … This is the Network Admin UI … Under the Hosts tab click on Add to add a new entry. Provide the IP and the unique alias.

Now in gFTP we can give this alias instead of the IP.

Filed in: feisty fawn, gFTP, ubuntu

by: sur

2 Comments

Moved fully on Ubuntu FeistyFawn

Hi everybody,

I have moved fully on Ubuntu FeistyFawn

There are lots of cool features in it like …. Run Application(the application launcher, hotkey alt+f2), the DesktopBar(full web and system search including files and folders, hotkey alt+f3) … and the TomBoy notes.

Use ctl+l to open explorer in specific location

Filed in: feisty fawn, ubuntu

by: sur

2 Comments

Travel Mate - a fully loaded opera widget for travelers…

Hey Everyone,
Check out the cool opera widget Travel Mate written by my friend Aditya

Features

  • Weather Information of the destination place
  • Location specific images
  • Google Maps of the destination place, a really nice feature… which makes this widget one of its own kind.
  • Flight booking, can check the availability of flights
  • Currency converter to provide the live value for your money from source to destination place.
  • And last but another useful trick is the World clock showing the time of two places “from” and “to”

Check out more details on the Official Travel Mate Blog

You can download the widget here

Filed in: opera, travel, widget

by: sur

No Comments

Defining Satisfaction

Do you actually know what is the definition for satisfaction for You ? Whenever i talk with my friends to earn huge and huge… a lots of time i usually get the comments that its not the money which can always satisfies you! More prior thing is the kind of work you are doing! Are you happy in what u r doing, or u r just doing it for the huge earning…

I thought upon the level of satisfaction which i get by time to time…. there were really diversified views started coming to my mind.. related to various aspects of the satisfaction… What Satisfaction is ? Actually its not just one thing which can feel you happy, satisfied all the time… you need good money, good work, good position! do you ? … i think everybody does!

I categorized the reasons for the satisfaction for the happiness in three categories…

Personal Satisfaction

If you are satisfied in The kind of work you are doing … today… a lots of lucky guys are satisfied in this road of satisfaction destination. And me too fall in that … I am a rubyist, i do rails, i am happy :)

Potential Satisfaction

How much money you are getting(or making too, if u have investor bent of mind)… The level of this is totally created by individual perception and the level upto which you wanna reach… Is it million, millions, billion, billions or more or less for you.. thats always in your mind. That nobody can tell better than yourself… How much you are happy in ?

Professional Satisfaction

Here comes an entirely different aspect of satisfaction. The Position. Whats yours ? A Software Engg, a Senior Software Engg, a Team Lead, a PM or more or less… Where you are happy in ? …. which shoes and hat you wanna wear… Or you are more biased in the clothes you wanna wear…
Whether you are happy with a huge money and a low/middle position or no matter about money but the Position matters you.. Or you wanna have both? Or nothing?

If you want nothing … think more deeply what you actually want… Rethink about the first category of satisfaction! Are you happy in what you are doing?
Think on the other side of the coin…This might be the right time for you to become an Entrepreneur.

Filed in: private, satisfaction

by: sur

No Comments