Archive for the ‘Ruby’ Category

Ruby 1.9-dev released!

Wednesday, December 26th, 2007

Ruby > Ruby 1.9.0 is released ของขวัญ Christmas จาก Matz!

รอคอยกันมานาน กับ Ruby 1.9 ซึ่งเป็น major release แรกหลังจาก 1.8 ออกมานานแล้ว ซึ่งใน version นี้จะมีอะไรหลายๆ อย่างเพิ่มเข้ามา โดยเฉพาะที่หลายๆ คนรอคอยกัน ก็คือประสิทธิภาพที่เพิ่มขึ้น ความเร็วที่เพิ่มขึ้น

  • เนื่องจากมันเป็น development release ดังนั้นมันจะยังไม่ stable นะครับ (จาก message ของ Matz เองใน ruby-forum.com

    We couldn’t make it error free, but it’s fairly good, we hope.

  • ใครที่ใช้ Ruby on Rails เป็นหลัก อย่าเพิ่ง ลงเด็ดขาดครับ เพราะว่ามันยังไม่ compatible กัน ทาง Rails จะยังต้องเปลี่ยนโน่นเปลี่ยนนี่เยอะเหมือนกันนะ (อันนี้ผมไม่ confirm ครับ เพราะว่าผมยังไม่ได้ลองดู Ruby 1.9 และภายในของ Rails ละเอียดพอที่จะให้ comment อะไรได้) แต่ว่าก็มีคนศึกษาเรื่องนี้เหมือนกัน เช่นที่ eigenclass เป็นต้น
  • ในขณะที่ประสิทธิภาพสูงขึ้นพอควรจาก benchmark ต่างๆ นั้น … ประสิทธิภาพกับ Rails (เท่าที่ test ได้) กลับไม่ดีขึ้นเท่าที่ควร (และแย่ลงด้วยในบางกรณี)

ร้องเพลงรอกันไปนิดดีกว่าครับ แต่ว่าถ้าใครมีเวลาก็ลองเล่นดูก็ดีครับ เพราะว่าไม่ช้าก็เร็ว เราก็ต้องเจอกับมันอยู่แล้ว

Upgrade เป็น Ruby 1.8.6 กับปัญหา IRB, Readline

Wednesday, August 22nd, 2007

หลังจากใช้ Ruby 1.8.5 มานาน ก็อยากจะลองของไปเล่น 1.8.6 ซึ่งมันก็ออกมาได้ซักพักแล้วล่ะ ซึ่งเราก็ลงตาม step ล่ะนะ ไม่ยากไม่เย็น

  • Download source ของมันมาก่อน อันนี้หาไม่ยาก แล้วก็เอามา untar ตามปกติ
  • configure มันไปซะ ใช้ pthread กับ readline ด้วย แล้วก็เอาไว้ที่ /usr/local ตามปกติ

    ./configure --prefix=/usr/local \
    --enable-pthread --with-readline-dir=/usr/local
  • ไม่มีปัญหาอะไร ก็ make แล้วก็ sudo make install ซะ ก็ไม่มีอะไร
  • check version ซะหน่อย

    [rawitat@entropy rawitat]$ ruby -v
    ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1]
    
  • น่าจะปกติ แต่ว่าพอเรียก irb ปุ๊บ
    [rawitat@entropy rawitat]$ irb
    dyld: NSLinkModule() error
    dyld: Symbol not found: _rl_clear_signals
      Referenced from: /usr/local/lib/ruby/1.8/i686-darwin8.10.1/readline.bundle
      Expected in: flat namespace
    
    Trace/BPT trap
    [rawitat@entropy rawitat]
    

เฮ้ย อะไรเนี่ย!!!!!

ไม่เป็นไรๆ ไม่ต้อง panic มันต้องมีคนเจอปัญหานี้ก่อนหน้าเราบ้างล่ะน่า ว่าแล้วเราก็ลอง search google ดูหน่อย อืมม มันไม่มีคนเจอปัญหาเดียวกันเป๊ะๆ แฮะ เจอแต่ใกล้เคียงมากๆ เพราะว่าชาวบ้านเค้าเจอ _rl_filename_completion_function กัน แต่ว่าเราดันเจอ _rl_clear_signals แทน

อืมมมๆ ไม่เป็นไรๆ ลองทำตามวิธีแก้ปัญหาของเขาดูก็แล้วกัน

  • วิธีนี้ เคยใช้ได้ผลมาแล้วตอนลง 1.8.5 (แล้วทำไมตอนนั้นไม่ได้ blog ไว้ก็ไม่รู้) ก็คือให้ไป rebuild readline.bundle ใหม่ แล้วก็ copy ไปลงที่ปกติมันเก็บ readline.bundle ไว้ แต่ว่าคราวนี้ ล้มเหลว
  • วิธีนี้ ก็คือวิธีเดียวกัน แต่ว่า verbose หน่อย ไม่ต้องบอกก็รู้ว่าผลเป็นไง
  • วิธีนี้ ให้แก้ rbconfig.rb ไปเพิ่ม -lreadline ใน CONFIG["LIBS"] ก็ลองแล้ว สรุปว่า ล้มเหลว เหมือนกัน

ทำไงดีหว่า อืมมมมม เริ่ม panic นิดหน่อย ผิวปากกลบเกลื่อนๆ

  • เริ่มมั่ว เอา readline 5.1 มาลงใหม่ (ตอนแรกใช้ 5.2 อยู่ แต่ว่าเห็นตาม web มันยังเขียน 5.1 อยู่ เออ ไม่เสียหลายน่า)… ไม่เวิร์ก
  • มั่วต่อไป ลง readline 5.2 อีกทีเด๊ะ …. ไม่ได้อยู่ดี (มันควรจะได้มั้ยล่ะนั่นน่ะ ไอ้บ้า)
  • เฮ้ย …..​ configure, build ruby ใหม่อีกรอบ (สิ้นคิด เมื่อกี้มันไม่ work คราวนี้มันจะ work ได้ไง) ก็ ไม่ได้

เฮ้อ เหนื่อย…..​ ทำไงดีหว่า พอดีเหลือบไปเห็น

 Referenced from: /usr/local/lib/ruby/1.8/i686-darwin8.10.1/readline.bundle

ใน error message ก็เลยลอง cd เข้าไปเล่นดู (อีกที จริงๆ เข้าไปหลายครั้งแล้ว) ก็เห็นว่านอกจาก i686-darwin8.10.1 แล้ว ข้างในนั้นยังมี i686-darwin8.9.1 ด้วย ก็เลยลองเข้าไปดู …… ก็เห็น readline.bundle อยู่ตัวนึง คงเป็นตัวที่เรา build ครั้งก่อนๆ หน้าโน้น (ไม่รู้เมื่อไหร่ ก็ตั้งแต่ darwin 8.9.1 น่ะแหละ ตอนนี้ใช้ darwin 8.10.1 อยู่) ……​

ก็ในเมื่อ rebuild readline.bundle ใหม่ (configure ใหม่แล้วนะ) แล้วก็ replace มันตามวิธีที่ linkๆ ไปให้ใน link ข้างบนแล้วไม่ work ลองบ้านนอกดูเด๊ะ

sudo cp /usr/local/lib/ruby/1.8/i686-darwin8.9.1/readline.bundle \
   /usr/local/lib/ruby/1.8/i686-darwin8.10.1/readline.bundle

……
……. แล้ว

[rawitat@entropy rawitat]$ irb
irb(main):001:0> 

ดันได้ซะงั้นอ่ะ ………. เนี่ย ถ้าไม่เคย build ไว้เลย ไม่รู้จะทำไมนะเนี่ย ไม่รู้มันไปติดตรงไหนแล้ว (ตอน configure ที่จะ rebuild readline.bundle มันก็ check เจอนะ ไอ้ _rl_clear_signals เนี่ย …​ไม่รู้ว่าทำไมเวลาจริงมัน ref ไม่ได้)

เอวัง