warning: Creating default object from empty value in /home/www/virtual/kiterminal.com/htdocs/blog/modules/taxonomy/taxonomy.pages.inc on line 33.

Ruby

การติดตั้ง RVM + Ruby บน CentOS 5.6

1. ติดตั้ง git และ curl โดย

$ su
$ yum install git
$ yum install curl

2. สร้าง group ชื่อ rvm และเพิ่ม root เข้าใน rvm

$ su -
$ groupadd rvm
$ usermod -a -G rvm root
$ logout

3. ติดตั้ง RVM เข้า system สำหรับใช้แบบผู้ใช้หลายคน

$ sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
$ echo '[[ -s "/usr/local/lib/rvm" ]] && . "/usr/local/lib/rvm"  # This loads RVM into a shell session.' >> ~/.bash_profile
$ source ~/.bash_profile
$ type rvm | head -1 # should print 'rvm is a function'

Ruby 1.9: invalid multibyte char (US-ASCII)

วันนี้เจอปัญหา Ruby กับภาษาไทย โดยเจอ error invalid multibyte char (US-ASCII) หลังจากหาวิธีแก้ก็พบว่าให้เพิ่ม code ด้านล่างนี้ไว้บรรทัดแรกของไฟล์

# encoding: utf-8

เพียงเท่านี้ก็แก้ปัญหาได้แล้ว

การหาช่วงเวลาของไฟล์วีดีโอด้วย Ruby และ FFmpeg

วันนี้มีงานที่ต้องหา duration ของไฟล์วีดีโอซึ่งมีจำนวนมากเกินไปที่จะใช้คนทำ ดังนั้นจึงเลือกใช้ FFmpeg ในการทำงาน ซึ่ง code มีดังนี้

command = "ffmpeg -i filename.m4v 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//"
output = `#{command}`
if output =~ /([\d][\d]):([\d][\d]):([\d][\d]).([\d]+)/
  duration = (($1.to_i * 60 + $2.to_i) * 60 + $3.to_i) * 10 + $4.to_i
end

หอคอยแห่งฮานอย (Tower of Hanoi)

เมื่อวันพุธที่ผ่านมานั้นมี Programming Day โดยอาจารย์เดฟได้ให้ทำโจทย์ต่างๆ แต่มีข้อนึงต้องแก้ปัญหา หอคอยแห่งฮานอย (Tower of Hanoi) ซึ่งผมใช้ภาษารูบี้ (Ruby) ในการเขียนโปรแกรม โดยอาจารย์ได้แนะนำการทำดังนี้

1. กำหนดปัญหาดังรูปด้านล่าง และกำหนดให้แผ่นจานล่างสุดเป็น head ที่เหลือเป็น tail

Convert Decimal to Binary in C++ and Ruby

C++

void binary(int number) {
  int remainder;
 
  if(number <= 1) {
    cout << number;
    return;
  }
 
  remainder = number%2;
  binary(number >> 1);
  cout << remainder;
}

Ruby

>> 7403.to_s(2)
=>1110011101011

ใช้ภาษา ruby สบายใจกว่ากันเยอะ bug ที่จะเกิดน้อยกว่าภาษา C++ แน่ๆ (พูดให้คนอ่านเปลี่ยนมาเล่น ruby กันมากขึ้น)

ความแปลกของ String Ranges ใน Ruby

> ('1'..'10').to_a
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
> ('2'..'10').to_a
=> []
> ('3'..'10').to_a
=> []
> ('2'..'20').to_a
=> ["2", "3", "4", "5", "6", "7", "8", "9", . . . . ., "18", "19", "20"]
> ('3'..'20').to_a
=> []
> ('10'..'20').to_a
=> ["10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]
> (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> (2..10).to_a
=> [2, 3, 4, 5, 6, 7, 8, 9, 10]
> (3..10).to_a
=> [3, 4, 5, 6, 7, 8, 9, 10]

update:

> (2′..’10).to_a
=> []

การแปลงจาก string ให้เป็น date ใน Ruby

พอดีว่าทำงานเกี่ยวกับปฏิทินนิดหน่อย และต้องมีการใส่วัน เดือน และปี จากนั้นจะเปลี่ยน String ที่ได้รับเข้ามาให้เป็น Date จึงพึ่งพาพลังของ Google ก็เจอ code ด้านล่างนี้

> require 'date'
> date = Date.strptime('24-07-2007', '%d-%m-%Y')
> date.mday # => 24
> date.month # => 7
> date.year # => 2007

อยากจดเก็บไว้เสียหน่อย…กันลืม