Ruby on Rails workshop in Delhi

After successfully organizing the RubyFunDay in Pune and Delhi, Geekeerie is launching a new product “The Geekups”.

FunDays is our series of free un-conferences, driven by the vision of bring together the developer community. The focus of FunDay is sharing and learning.

Geekups are going to be hands on workshops, conducted by professionals. The focus will be on top notch content and sessions by the best in the industry. And you guessed it right, Geekups won’t be free. They would have a minimal fee, so that we are able to cover the expenses and compensate the professionals who would conduct the session for their time.

The first Geekup is the Rails.initialize(:step => 1) which would be a RubyOnRails workshop for the beginners. Rails.Initialize(:step => 1) is the first of the two basic level Rails geekups. The step 1 is for those who want to start developing web applications using RubyOnRails framework.

We have a lot more planned and will be coming soon. There’s Rails.initalize(:step => 2) and then we have niche topics like building your multitenanted SAAS application with subdomain-fu in Rails, Deployment and Scaling challenges for your rails app and many more coming soon.

Coming back to Rails.Initialize(:step => 1), this would be first of it’s kind of workshop in India which will provide full day live coding and a great exposure to all required things to kickstart a Rails application.

You must attend the Geekup if …
-> you are planning to start learning Ruby on Rails
-> you are not able to find out the time from your busy schedule to learn Rails
-> you always wanted to learn Rails but pushing it back as it’s a new Framework and you don’t even know Ruby

The details of the first Geekup are on this page

For any other information contact me at sur.max@gmail.com

Filed in: Ruby, Uncategorized, event, rubyonrails, training, workshop

by: Sur

No Comments

Ruby FunDay — First ever full day Ruby Code Burning Station in Delhi, India

Since last one year, there is quite a bit of Ruby and RubyOnRails development happening in India. Still the biggest thing missing here is the official Ruby and Rails meet-ups like RailsConf and RubyConf. Being in Ruby and Rails community since last three years I’ve been attending many events in India but couldn’t find any of them Ruby centric. And in one of the past event I and Manik decided to have an event focusing fully on Ruby and RubyOnRails.

And here we come. We are organizing the first RubyFunDay. Its going to be one of its kind of event in India. There would be sessions on some of the really hot topics…

  • Flex + Rails
  • Internationalization in Rails
  • FxRuby+AR
  • Facebook APP + Rails


If you like to have Fun with Ruby, you are most welcome to attend the event. To attend the event, you would need to register online for the event. Its going to happen in a very decent venue, and we are hearty grateful to Impetus Technology for sponsoring the venue. I am sure you would enjoy a lot in the event.


More good things in the event apart from Ruby and Rails includes the printed Ruby Ts ;) … cool yeah ?

RubyFunDay is going to be a pure Code Burning Station. Every session would be full of live code demonstrations.
If you would like to present a session at this event, register online for it and send me an email with your topic’s details on [surDOTmaxATgmailDOTcom]. The only constraint we have is, it should not be mere presentation, you will have to show the live code in the session.

For registration and more details on the event please visit here

I would really appreciate if you blog/tweet about the event and help spreading a word about it. If you do, please add the tag/category to the post as “rubyfunday”.

If you would be there, and get time, I would love to speak to you. You can recognize me easily, its very simple, I wear Jeans and T-shirts mostly ;)

See you there with more and more Ruby.

Filed in: event, ruby, rubyfunday, rubyonrails

by: Sur

No Comments

RubyOnRails Plugin: Auto Tags

Announcing the release of this tiny useful plugin AutoTags.
A couple of weeks ago I travelled to Mumbai in train which was a long 17hrs journey… and I utilized that by coding down the idea while travelling. So here it comes…

AutoTags, an open source project, is a plugin for RubyOnRails applications to automatically generate the relevant tags for the provided content. Its quite simple to use and provide easy integration with ActiveRecord. The plugin is very useful for social applications, community websites and all those networking applications where there is a scope of user generate content to be tagged. No more heck for the admin to sit and add the tags to the content or waiting for the users to add the tags to their content.

For installation and usage read here.

If you liked the plugin then please recommend me on workingwithrails.

Filed in: auto_tags, networking, open_source, plugin, rubyonrails

by: sur

1 Comment

Rails-Tip : Use Capture to wrap a part of View in a variable

The view helper method capture provides this functionality to wrap a section of the view template in a variable and can be used multiple times in the view.

Usage :

<% @message = capture do %>
  You can earn a lot, if you use your brain!
  <%= link_to "Click here", earning_url %> to know more!
<% end %>

Advantage:

If its needed to render a section of template code, we usually go with partials. Capture is specifically useful when partial is only going to be used in just one view template. As there will be this variable available throughout the template, we can use it as many times as needed instead of partial.

Filed in: rails, rails-tip, rubyonrails

by: sur

3 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 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

22 Comments

Plugin: Validate Attributes - validate one or more specific attributes

Hi all,
I found an answer(a tweak) to the question which was pinging my mind while working on my current project that How to validate one or more specific attribute of the model(field of the table i mean)?, as the requirement was to save a record after validating the model’s object through 4 steps ie. 4 different forms. Although i found something in the Rails API to put some step constraints on the validations in the model, but i didn’t find it that much flexible so i wrote a snippet which validates one or more specific attributes and can also save the record on the basis of validating specific attributes. Then i thought to pluginize it, as it might be useful

Check out the plugin Validate Attributes
It provides a simple way to validate specific attribute(s) unlike the function valid? which collectively validates all the attributes.

For more information about the plugin regarding SVN repository, usage, example please visit here

If you like/dislike the plugin or if you have some issue/conflict, please do not forget to post a comment.

Filed in: plugin, rails, ror, ruby, rubyonrails, validate_attributes

by: sur

9 Comments

Simple Captcha 1.0

Update: SimpleCaptcha 1.2.2 is up!!

Major Changes…

FileSystem Usage Removed

Works Perfectly with Multiple Clustered Servers

Read Here for more details on implementation, usage and examples.


Filed in: captcha, plugin, rails, ruby, rubyonrails, validations

by: sur

160 Comments