การตั้งค่าให้ Rails ใช้งาน Gmail SMTP Server

1. ให้นำ code ด้านล่างนี้ไปไว้ใน directory ชื่อ lib และตั้งชื่อไฟล์คือ smtp_tls.rb

require "openssl"
require "net/smtp"
 
Net::SMTP.class_eval do
  private
  def do_start(helodomain, user, secret, authtype)
    raise IOError, 'SMTP session already started' if @started
    check_auth_args user, secret, authtype if user or secret
 
    sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
    @socket = Net::InternetMessageIO.new(sock)
    @socket.read_timeout = 60 #@read_timeout
 
    check_response(critical { recv_response() })
    do_helo(helodomain)

การ generate password โดยใช้ ruby

ในการใช้งานบางครั้งเราจะต้อง generate อะไรบางอย่างออกมา แต่งานที่ผมทำนั้นจะต้อง generate password เพื่อใช้ในการสมัครสมาชิก ซึ่ง code ที่เขียนนั้นก็มีดังนี้

irb(main):001:0> def generate_password(length = 6)
irb(main):002:1> chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('1'..'9').to_a - ['o', 'O', 'i', 'I']
irb(main):003:1> Array.new(length) { chars[rand(chars.size)] }.join
irb(main):004:1> end
=> nil

การใช้งาน

irb(main):005:0> pass = generate_password
=> "khbNP9"

หรือ

irb(main):006:0> pass = generate_password(15)

การเขียนและใช้งาน Stacks และ Queues ใน Haskell

Stacks

newtype Stack a = Stk [a] deriving Show
 
push x (Stk xs) = Stk (x:xs)
 
pop (Stk []) = error "pop from an empty stack"
pop (Stk (_:xs)) = Stk xs
 
top (Stk []) = error "top from an empty stack"
top (Stk (x:_)) = x
 
emptyStack = Stk []
 
stackEmpty (Stk []) = True
stackEmpty (Stk _ ) = False

ตัวอย่างการเรียกใช้งาน

$ hugs Stacks.hs
Main> push 5 (push 3 (push 1 emptyStack))
Stk [5,3,1]
Main> top (push 5 (push 3 (push 1 emptyStack)))
5
Main> pop (push 5 (push 3 (push 1 emptyStack)))
Stk [3,1]

การใช้ autocomplete ใน Rails

สร้างฐานข้อมูลโดยมี table ชื่อ dishes และมี field ดังนี้

create table dishes (
  id int not null auto_increment,
  name varchar(50) not null,
  descript varchar(100),
  primary key(id)
);

ใส่ข้อมูลลงในฐานข้อมูลที่ได้สร้างขึ้นมา โดยข้อมูลตัวอย่างมีดังนี้

insert into dishes (name, descript) values ("ข้าวผัดกะเพราหมูแดง", "ผัดกะเพราหมูแดง");
insert into dishes (name, descript) values ("ข้าวคะน้าหมูกรอบ", "ผัดคะน้าใส่หมูกรอบ");
insert into dishes (name, descript) values ("ข้าวคอหมูย่าง", "เนื้อหมูย่างราดน้ำจิ้มเผ็ด");

การทำ auto-indent แบบ Emacs ใน TextMate

วิธีการทำให้ TextMate มี auto-indent แบบ Emacs (ชอบ editor ตัวนี้เพราะ auto-indent) ซึ่งวิธีการนั้นง่ายมาก โดยมีขั้นตอนดังนี้

1. Automation/Start Macro Recording (option+cmd+m)
2. Text/Indent Line (option+cmd+[)
3. Automation/Stop Macro Recording (option+cmd+m)
4. Automation/Save Scratch Macro... (ctrl+cmd+m)
5. ตั้งชื่อตามใจชอบ (Macro จะถูก save ใน username's Bundle ใน TextMate)

Haskell list functions ใน Prelude.hs

: เพิ่มสมาชิก 1 ตัวข้างหน้าลิสต์

Hugs> 1 : [2, 3]
[1,2,3]

++ รวมลิสต์ 2 ลิสต์เข้าด้วยกัน

Hugs> "Kit" ++ "erminal"
"Kiterminal"

!! คืนค่าตำแหน่งที่ต้องการของลิสต์ โดยเริ่มจากตำแหน่งที่ 0

Hugs> [1, 3..10] !! 1
3

concat การเชื่อมลิสต์ของลิสต์ให้เป็นลิสต์เดียวกัน

Hugs> concat [[1, 2], [], [3]]
[1,2,3]

length บอกความยาวของลิสต์
 

ทำบุญ

วันนี้ไปทำบุญถวายสังฆทานที่ “วัดหนองปลาไหล” จ.นครปฐม รู้สึกจิตใจจะดีขึ้นกว่าเดิมมาก หลังจากไม่ได้ทำบุญมานานแสนนาน แต่ก็มีเรื่องสะกิดใจเล็กน้อยในเรื่องของการทำบุญสังฆทาน เนื่องจากคนจำนวนมากมักไปถวายสังฆทานกับพระภิกษุที่ตนเองรู้จัก โดยหารู้ไม่ว่า สิ่งที่กระทำลงไปนั้นไม่ใช่ สังฆทาน แต่จะเรียกว่า ปาฏิบุคคลิกทาน มีความหมายคือ ทำบุญโดยเจาะจงบุคคลที่จะรับทานนั้นไว้ แต่หากต้องการทำสังฆทานจริงๆนั้นไม่ควรมีการระบุผู้รับไว้ก่อน