RSS
 

Archive for the ‘Tricks’ Category

อัพเกรด bash

10 Oct

เขียน shell script ใน bash (Bourne-Again SHell) มาก็หลายตัว สิ่งที่รำคาญที่สุดก็คือการเขียน loop เพราะว่าต้องเขียน

for i in 1 2 3 4 5

อะไรทำนองนี้ ถ้ามันเป็นตัวเลขก็ยังพอจะหาโปรแกรมพวก seq หรือว่า jot มาใช้ได้ไม่ยากนัก หรือว่าจะเขียนเองก็ไม่ได้ยากเย็นอะไรเท่าไหร่ ถ้าบางทีเป็นตัวอักษรนี่ก็คงจะลำบากหน่อย แต่ว่าก็เขียน Ruby script ที่จะสร้าง sequence ตัวอักษรต่อๆ กัน ก็ไม่ได้ยากเท่าไหร่ …. แต่ว่าคำถามก็คือว่า ทำไมต้องมาทำแบบนี้ด้วยหว่า มันน่าจะมีอะไรซักอย่างที่ช่วยได้สิ

และแล้ววันนี้ก็ไปเจอมาจาก blog ของ Sam Danielson

เห็นแล้ว โอ้โฮ!

for i in {1..12}

ไม่พอๆ หรือว่า

mkdir {a..z}{1..12}

ไอ้นี่สิ killer ชัดๆ

wget http://www.anoyingpages.com/page_{1..12}.html

เพิ่งจะรู้ว่า bash มันทำแบบนี้ได้ด้วยแฮะ! ทำไมไม่เคยรู้มาก่อนเลยหว่า

และแล้วเราก็ลองไปเล่นใน bash เรามั่ง … และแล้วเราก็มานั่ง bashing มัน ทำไมมันไม่ work วะ ให้ตายเถอะ ก็เลยลอง search หาเรื่อง Brace expansion ใน bash ต่อไป และแล้วเราก็มาถึงบางอ้ออีกครั้ง

บางอ้อที่ว่านี่ก็คือเลข version และแล้วเราก็เลยต้องรีบไป check version ของ bash เราว่ามันเป็นไง

echo $BASH_VERSION

สรุปว่าเป็น 2.05b … โห OS X 10.4 (Tiger) มันให้ bash เก่าขนาดนี้เลยหรือนี่ (ปล. ห้ามใช้ bash –version นะครับ เพราะว่ามันไม่ได้หมายความว่ามันเป็น bash ตัวที่คุณใช้อยู่ มันแค่เป็นตัวแรกที่อยู่ใน path เท่านั้นเอง)

ก็เลยเข้าไป check ดูจาก new features list ของ bash 3 มีเยอะแยะมากมาย ….​ อืมมม ถึงเวลาที่จะต้องเปลี่ยน shell แล้วหรือนี่

ก็หามาลงสิครับพี่น้อง! และแล้วเราก็ไปเอา source ของ bash 3.2 มาลง ก็ compile ลงตาม step ปกติ โดยผมให้ไปลงที่ /usr/local/ ครับ แล้วเดี๋ยวค่อย chsh กับทำ symbolic link เอา อ่อ อย่าลืม backup bash ตัวเก่าไว้ด้วยนะครับ (เก็บเป็น bash2 หรือว่าอะไรก็ได้) เดี๋ยวจะมีปัญหา….. กลัวเหมือนกัน

ไม่ได้ apply patch อะไรเลยนะ (เห็นมีตั้ง 25 ตัว) ขี้เกียจ …

พอลงเสร็จแล้ว ตอนนี้ใช้งาน bash 3.2 เฮ้อ ใช้ command-line บน terminal มีความสุขขึ้นเยอะเลย ลองทำตามตัวอย่างใน web ของ Sam Danielson ก่อนก็ได้ครับ สนุกดี :-D

หวังว่า OS X 10.5 (Leopard) จะเป็น bash 3 โดย default นะ … (ใครลง beta หรือว่า preview อยู่ ช่วยทดสอบหน่อยครับ)

[update 1]: เพิ่ม killer example อีกตัว (wget)
[update 2]: เพิ่ม link ไปที่ source code ของ bash 3.2 แล้วก็แก้เลข version ที่ผิดหลายที่

 
 

Adium กับ network ใน ม. ศิลปากร

18 Sep

เวลาเล่น MSN เนี่ย ผมไม่ได้ใช้ MSN Messenger for Mac หรอกนะ แต่ว่าผมใช้ Adium ที่เป็น multi-protocol messenger ที่ Open source ด้วย หน้าตาสะสวย feature ดี (แต่ว่าผมก็ใช้แค่ MSN ล่ะนะ ไม่ได้ใช้ protocol อื่นเลย)

แต่ว่าเร็วๆ นี้มันมีปัญหาอะไรก็ไม่รู้ มัน online จาก netไม่work ในมหาวิทยาลัยไม่ได้เลยแฮะ … แต่ว่า MSN Messenger ดันใช้ได้ซะงั้น (แต่ว่า 6.0.2 มีปัญหากับ Safari 3 นะ ถ้าใช้ Safari 3 ก็ upgrade เป็น 6.0.3 ซะ) ไม่รู้สาเหตุว่าทำไม ไป online จากที่อื่นได้หมดเลยนะ นอกจากใน ม. เอง จะบอกว่าเค้า block MSN ก็ไม่น่าใช่ เพราะว่าถ้างั้น MSN ก็ต้องใช้ไม่ได้ด้วยสิ

ก็เลยถึงบางอ้อเอาก็วันนี้แหละ … ว่าต้องใส่ DNS ใน Network setting ใน System preferences ด้วย (พบโดยบังเอิญว่าเราไม่ได้ set มัน เอาออกแต่เมื่อไหร่หว่า เมื่อก่อนใส่ตลอด)

สำหรับคนที่ใช้ Mac ใน ม. ศิลปากร (โดยเฉพาะที่ทับแก้ว) แล้วต้องการใช้ Adium แต่ว่า online ไม่ได้ ลองตั้งค่า DNS ดูนะครับ เอาเป็น 202.28.72.66 ก็ได้ครับ อันนี้ DNS ของภาควิชาคอมพิวเตอร์ครับ (แต่ว่า MSN Messenger มันใช้ได้โดยไม่ต้อง set DNS นะ)

[update 1]: ผู้ช่วยสองคน kiterminal confirmed ว่าใช้งานได้จริง แต่ว่า neokain บอกว่าก็ยังใช้ไม่ได้อยู่ดี

[update 2]: รู้สึกจะดีใจเร็วไปแฮะ … หลังจาก net หลุดไป กลับเข้ามาใหม่ ดัน online ไม่ได้ซะงั้น T_T

 
1 Comment

Posted in Tricks

 

Syntax highlighting

16 Sep

คิดๆ อยากจะเขียน code snippet (ที่ไม่เกี่ยวกับ mac development) ลงในนี้บ้างเหมือนกัน แต่ว่ามันไม่มี highlighting เจ๋งๆ เลย ไอ้ตัวที่ใช้อยู่นานนมกาเลอย่าง code2html ก็ดันไม่ highlight Haskell อีก จะเขียนเพิ่มเข้าไปเองก็ขี้เกียจ (ทั้งๆ ที่จริงๆ ก็ทำได้อ่ะนะ แต่ว่า code มันเขียนแบบ Perl-ish มากกกกก แถมไม่ factored ไม่แยก module เท่าไหร่) … อืมมม มันต้องมีคนคิดเหมือนเราสิ ว่าแล้วก็เริ่มหา

สักพักก็ไปเจอหน้า Plugins/Syntax Highlighting ที่ WordPress เอง แต่ว่าเท่าที่อ่านๆ ดูไม่ค่อยจะมีตัวไหนเข้าท่าเลยแฮะ (มันไม่ highlight Haskell ซักกะตัว เท่าที่อ่านแบบผ่านๆ) นอกจาก Vim Color แต่ว่าไอ้ตัวนี้ก็ดันไป dependent กับ Text::VimColor ที่เป็น Perl module ต้องลงผ่าน CPAN อีก เออ ไม่เป็นไร ลงก็ได้ แต่ว่าก็ดัน build ไม่ผ่านซะงั้น (test ผ่านน้อยไปหน่อย) จะ force install ลงเลย ก็ดันไม่ work อีก เฮ้อ เบื่อจริง ก็เลยต้องหาต่อไป

และแล้วเราก็ไปเจอ GeSHi: Generic Syntax Highlighter ที่เขียนในภาษา PHP เราก็เลยเอามาเขียนทำเป็น command line application ง่ายๆ ที่อ่านไฟล์ตาม argument แล้วก็เดาภาษาจาก extension ของไฟล์ แล้วก็พ่น highlighted code ที่เป็น HTML ออกมาให้เรา code-paste ใส่ blog ได้ผลดังนี้ (Haskell)

import List
 
permute [] = [[]]
permute xs = [x:ys | x <- xs, ys <- permute (delete x xs)]
 

หรือว่าภาษา Ruby แบบนี้

class Array
  def permute
    return [self] if size < 2
    perm = []
    each {|e| (self - [e]).permute.each {|p| perm << ([e] + p)}}
    perm
  end
end
 
[0,1,2,3].permute.each {|e| p e }

ก็ใช้ได้อ่ะนะ แต่ว่ามันอาจจะรก HTML code ไปหน่อยนึง

[update 1]: พอมี line number แล้วมันเละใน blog แฮะ เลยเอาออก ไว้จะแก้ CSS ทีหลัง ตอนนี้ขี้เกียจ (อีกล่ะ)

[update 2]: เพิ่งจะสังเกตจากหน้า web ว่า \\ ใน code haskell มันหายแฮะ เหลือแค่ตัวเดียว .. ไม่รู้เหมือนกันว่าทำไม code ฝั่งนี้ก็ยังอยู่นะ เลยไม่รู้จะว่าไงดี :-(

[update 3]: สุดท้ายก็เลยลงเอยด้วยการเขียน code ใหม่ไม่ให้มันมี \\ อืมมม อ่านเป็นภาษาคนกว่าเก่าแฮะ แต่ว่ามัน geek-ish น้อยลง :-P

[update 4]: อ๊ากกก GeSHi มันไม่มี Erlang highlighting! ว้า กำลังจะหัดเล่นอยู่เลย ว่าแต่ Erlang นี่ทำไมมันลูกเมียน้อยตอนนี้จังเลย emacs ก็ไม่มี (ผมใช้ Carbon Emacs distribution) TextMate ก็ไม่มี มีแต่ vim … สุดท้ายก็ตายรังสินะ แต่ว่า Emacs mode ของ Erlang ก็ไม่น่าหายากเท่าไหร่ [note -- ณ ปัจจุบัน เจอแล้ว] ไม่เป็นไร มีเวลาและชินๆ กับ Erlang มากกว่านี้เมื่อไหร่ (พอจะชินกับ module/keywords) แล้วเดี๋ยวค่อยทำเพิ่มเข้าไปใน GeSHi เองก็ได้วะ

 

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

22 Aug

หลังจากใช้ 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 ไม่ได้)

เอวัง