How false Is nil

Posted by root Mon, 04 Aug 2008 13:59:00 GMT

Use nil when the return is a boolean value.
Use false when the return is either false or not true object.
Otherwise they have pretty much the same semantic:
nil == false => false
nil.nil?        => true
false.nil?     => false
true.nil?      => false

if !nil && !false
  puts 'true'
end

if nil.nil? && !true.nil?
  puts 'true'
end

>> TrueClass.ancestors
=> [TrueClass, Object, Kernel]
>> FalseClass.ancestors
=> [FalseClass, Object, Kernel]
>> NilClass.ancestors
=> [NilClass, Object, Kernel]

Ruby core docs

Posted in  | Tags  | no comments | no trackbacks

Multiplication Table In AoH Structure

Posted by root Sun, 03 Aug 2008 18:09:00 GMT

mt = Array.new(10) { |e| Hash.new { |h,k| h[k] = k * e } }

mt[1][2] => 2
mt[2][2] => 4
mt[5][4] => 20
mt[9][5] => 45

Posted in  | Tags ,  | no comments | no trackbacks

Converting Between Numeric Bases

Posted by root Fri, 01 Aug 2008 05:58:00 GMT

Sample .bashrc file:
# decimal to binary
alias d2b='ruby -e "puts ARGV.first.to_i.to_s(2)"'
# decimal to hexademical
alias d2h='ruby -e "puts ARGV.first.to_i.to_s(16)"'
# decimal to octal
alias d2o='ruby -e "puts ARGV.first.to_i.to_s(8)"'

# binary to decimal
alias b2d='ruby -e "puts eval(%q|0b| + ARGV.first)"'
# binary to hexademical
alias b2h='ruby -e "puts eval(%q|0b| + ARGV.first).to_s(16)"'
# binary to octal
alias b2o='ruby -e "puts eval(%q|0b| + ARGV.first).to_s(8)"'

# hexademical to decimal
alias h2d='ruby -e "puts eval(%q|0x| + ARGV.first)"'
# hexademical to binary
alias h2b='ruby -e "puts eval(%q|0x| + ARGV.first).to_s(2)"'
# hexademical to octal
alias h2o='ruby -e "puts eval(%q|0x| + ARGV.first).to_s(8)"'

# octal to decimal
alias o2d='ruby -e "puts eval(%q|0o| + ARGV.first)"'
# octal to binary
alias o2b='ruby -e "puts eval(%q|0o| + ARGV.first).to_s(2)"'
# octal to hexademical
alias o2h='ruby -e "puts eval(%q|0o| + ARGV.first).to_s(16)"'

Posted in ,  | Tags  | no comments | no trackbacks

Google::Translate, A Simple API In Ruby

Posted by root Thu, 31 Jul 2008 11:03:00 GMT

require 'rubygems'
require 'google_translate'

tr = Google::Translate.new

# from English to German
tr.translate :from => "en", :to => "de", :text => "Hello, World!"
 => Hallo, Welt!

# from English to Spanish
tr.translate :from => "en", :to => "es", :text => "Hello, World!"
 => Hola, Mundo!

# WWW::Mechanize constructor usage
tr = Google::Translate.new { |agent| agent.user_agent_alias = 'Mac Safari' }

The project home page

Posted in  | Tags  | no comments

String Substitution

Posted by root Wed, 30 Jul 2008 13:59:00 GMT

require 'benchmark'

n = 1_000_000
s = " : : : "

Benchmark.bm do |x|
  x.report("tr:")   { n.times{ s.tr(":", ";") } }
  x.report("tr_s:") { n.times{ s.tr_s(":", ";") } }
  x.report("gsub:") { n.times{ s.gsub(":", ";") } }
end
Right, tr beats the other methods:
    user     system      total        real
tr:  2.760000   0.120000   2.880000 (  2.897022)
tr_s:  5.310000   0.240000   5.550000 (  5.822026)
gsub:  8.850000   0.200000   9.050000 (  9.311452)

Posted in  | Tags  | no comments

Google Translation API for Ruby

Posted by root Sun, 27 Jul 2008 11:47:00 GMT

In essence (from bulgarian to japanese):

  agent = WWW::Mechanize.new
  agent.post("http://translate.google.com/translate_t", 
    "sl" => "bg", 
    "tl" => "ja", 
    "text" => "Здравей, свят!").search("#result_box").inner_html

results in こんにちは、世界!

Posted in  | Tags  | no comments

three ways to print the alphabet

Posted by root Sun, 27 Jul 2008 07:55:00 GMT

String methods:
"a".upto("z"){ |i| puts i }
a = String.new "a"
0.upto(0){ p a }
1.upto(25){ p a.next! }
Range method:
("a".."z").each{ |e| puts e }

Posted in  | Tags  | no comments

def and undef a method

Posted by root Sat, 26 Jul 2008 04:50:00 GMT

  def my_method; end # define a method
  undef my_method    # remove a method
The core manual

Posted in  | Tags  | no comments

Ugly join implementation

Posted by root Sat, 26 Jul 2008 04:11:00 GMT

 arr = (1..10).to_a

 str = arr * ', '
 str = arr.join(', ')
Am I going to use the perlish coding style? Not really.

Posted in  | Tags  | no comments

Simple File Manipulation

Posted by root Mon, 21 Jul 2008 22:15:00 GMT

Ruby file manipulation is as easy as:
  MyFile.create "test.txt"
  MyFile.add "test.txt", "some content"
  MyFile.remove "test.txt"

For example create a file caled fileeasy.rb and add the following module to it:

module FileEasy

  def self.included(subject)
    subject.extend(ClassMethods)
  end

  module ClassMethods
   alias_method :delete, :remove
   alias_method :unlink, :remove

    def create(filename)
      File.open(filename, "w")
    end
    def add(filename, text)
      File.open(filename, "a"){ |f| f << text }
    end
    def remove(filename)
      File.delete(filename)
    end
  end

end

Then test it with irb:

require 'fileeasy'

class MyClass
  include FileEasy
end

MyFile.create "text.txt"
MyFile.add "text.txt", "test content"
MyFile.remove "text.txt"

Of course this post is just a simple tutorial and the standard library is the best choice – FileUtils.

Posted in  | Tags  | no comments

Older posts: 1 2 3 4 5