IronPython and me

posted on 17 May 2008 21:59 by plynoi  in Tech
ผมรู้จัก Python ตั้งแต่สมัยเรียนในหนังสือ @dev ในเครือ QuickPC ตอนนั้นก็ยังไม่สนใจมัน ภาษาไรวะ ไม่เคยรู้จัก จนทำงานได้สักสองสามปี กระแสมันเริ่มมันมา จึงสนใจและศึกษาแบบก๊อกๆ แก๊กเรื่อยมา

งานของผมตอนนี้เป็น Support หน้าที่คือรับหน้าเวลาโปรแกรมมีปัญหา ช่วยเหลือว่าอะไรมันผิด ถ้าผิดที่โปรแกรมก็ต้องเข้าไปดูระดับโค๊ดว่าผิดตรงไหนก่อนจะส่งให้ Dev พูดง่ายๆ คือยุ่งกับ Code อยู่ดี
ที่นี้งานหลักของการ Support คือการวิเคราะห์ log file ขนาดควายๆ ทั้งหลายแหล่ จนกระทั่งผมเริ่มทำด้วยมือไม่ไหว ต้องเขียนโปรแกรมเล็กๆ จัดการพวก text มาช่วยงานผม

ออกตัวไว้ก่อนว่า ภาษาที่ผมคุ้นเคยมากที่สุดตอนนี้คงไม่พ้น Java ผมเขียนมันจริงจังมา 4 ปีกว่า ส่วน Python ผมแค่อ่านหนังสือแล้วเขียนตามเอาก๊อกๆ แก๊กๆ และ entry นี้ก็ไม่ใช่ Java vs Python แต่อย่างใด!!! เตือนไว้ก่อน
ทำไมไม่ใช้ Java เขียน : ขี้เกียจสร้าง Project กับโปรแกรมเล็กๆ , เขียนเป็นอยู่แล้ว หัดภาษาอื่นบ้างสิฟ่ะ!!!
ทำไมเลือก Python : นั่นดิ !!! ผมรู้สึกว่าตอนเขียนมันมีอะไรให้ความรู้สึกเหมือน VB กะ PHP ที่เป็นสองภาษาที่ทำให้ผมกลับมาตั้งใจเรียนอีกครั้งดีน่ะ
ทำไมไม่เลือก Ruby, Groovy หรือภาษาอื่นๆ : เขียนไม่เป็นเฟ้ย!!!! (Groovy น่าสนแฮะ)
แล้วทำไมเสือกใช้ IronPython : เนื่องด้วย Office ผมเป็น บ.ระดับโลก (จริงๆ) ที่เสือกไม่รู้ความแตกต่างของ Freeware/Free Software/Open Source/Shareware ดังนั้น Python จึงเป็นโปรแกรมต้องห้าม แต่ .Net SDK ไม่ห้าม ^^

ด้วยความที่มือใหม่กับภาษานี้ + ยังคิดแบบ Functional ไม่เป็น เลยติดๆ ขัดๆ ได้เจ้านี่มาในเวลาประมาณ เกือบๆ ชั่วโมง
# -- Function Section -- #
def chk_Lost(lines,chk_lid):
     count_line=0
     lid_number='{ l=%d'%chk_l
     for line in lines:
          if lid_number in line:
               count_line=0
               break
          else:
               count_line=1
               continue
     if count_line!=0:
          print 'Listener ID %d does not get data'%chk_l

# -- Main Section -- #
import sys
if len(sys.argv)<4:
     print 'Please enter argument for the following format : Tool_lid.py filepath start_lid end_lid'
else:
     log=open(sys.argv[1])
     lines=[]
     lines=log.readlines()
     log.close()
     for chk_l in range(int(sys.argv[2]),int(sys.argv[3])+1):
          chk_Lost(lines,chk_l) <-- จริงๆ ตรงนี้ไม่ต้องเขียนเป็น method ก็ได้ แต่ติด Java มา
จริงๆ นี่เป็นโปรแกรม Python ที่สามของผมครับ เจ้า log ที่ผม check คือ log ของ API รับค่าหุ้นผ่านเนตแบบ real time (เขียนด้วย C++) ที่ผม Support โดยหุ้นแต่ละตัว (รับได้หลายร้อยตัวพร้อมๆ กัน) จะมีเลข ID ต่างกัน เวลาข้อมูลลงมาก็จะมี log ว่า { l= ตัวเลข ID นั้นๆ ซึ่งตอนนี้ data มันหายไป ผมเลย ต้อง check ว่ามีอะไรหายไปบ้าง ซึ่งลูกค้าที่รักพ่อเรียกดู 4- 5ร้อยตัวเกินกว่าดูด้วยมือได้ครับ

แล้วที่นี่ ผมต้องการจะแจกจ่ายโปรแกรมนี้ให้เพื่อนๆ ในทีม จะให้เค้าไปลง .Net กับ IronPython ก็กระไรอยู่ เลยไปได้วิธี Compile เป็น exe มาดังนี้
ipy –X:SaveAssemblies source.py
ก็จะได้ exe มาแต่มีข้อแม้ว่าต้องมี IronMath.dll และ IronPython.dll แปะไปด้วยเท่านั้น!!! (จริงๆ ลองใช้ jythonc compile เป็น Java class แล้ว มันแปลง py เป็นเป็น .java ได้แต่ compile ไม่ผ่าน คง set อะไรผิด)

ป.ล. 1เห็นโค๊ดห่วยๆ ข้างบนอย่างเพิ่งคิดมาก คนมันยังไม่ชิน สักพักน่าจะดีขึ้น แต่ใช้ interpreter นี่ดีแฮะ ทดสอบแต่ละส่วนของโค๊ดง่ายขึ้นเยอะเลย
ป.ล. 2 ไมมันเอา int+string ให้กลายเป็น string กันดื้อๆ ไม่ได้ฟ่ะ - -"

Comment

smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry ???????????????   ??????????????????
smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry ???????????????

Tweet

iny+string แล้วกลายเป็น string นี่เป็นฟีเจอร์ที่ผมโคตรเกลียดใน Perl เลยนะ แม่งดูแล้วเขียนยังไงก็มั่ว

#1 By ลิ่ว on 2008-05-17 22:35

ม่ายรุเรื่องเลย~~ *-*

#2 By AelitaX on 2008-05-17 22:49

ไม่เคยศึกษาเลยครับ
คือไม่รู้จะเอามาใช้อะไร
แต่เรื่องจัดการ text เคยเล่น perl นิดหน่อย ผมว่าง่ายดี

#3 By โก๋สิจ๊ะ on 2008-05-17 22:53

อ๊ะเอาเหตุผลไปใช้ตอบเพื่อนบ้างดีกว่า

#4 By llun (124.121.58.179) on 2008-05-18 09:15

ช่วยกันโปรโมตนะคร่าบ อย่าปล่อยให้หัวนมลอยนวล
http://witcha.exteen.com/20080518/entry-1

#5 By ตุ้ย since 2006 on 2008-05-18 16:11

int+string แล้วไม่ได้ string นี่แหละถูกแล้ว เพราะ python มันเป็น strong type น่ะ

#6 By pittaya (58.8.94.199) on 2008-05-19 08:17