ComBioLaw.De » Blog » เขียนโปรแกรม
พลอทแบบ advance ด้วย matplotlib
ปกติแล้วผมใช้ matplotlib ในการพลอทข้อมูลต่าง ๆ เพราะอะไรนั้น เดี๋ยวเล่าให้ฟังครับ พอพลอทเสร็จ ผมก็จะเซพพลอทที่ได้ในรูปแบบ SVG แล้วใช้ inkscape ตกแต่งรูปอีกที (รวมหลายพลอทเข้าด้วยกัน, ย่อขยาย, เติมข้อมูลเพิ่มลงไป ฯลฯ) ซึ่งผลที่ได้ก็เป็นที่น่าพอใจมาก เพราะคุณภาพพลอทที่ได้ค่อนข้างดี เพราะใช้ vector graphic แต่ปัญหามีอยู่ว่า หากผมได้ข้อมูลใหม่มา แล้วต้องพลอทใหม่อีกรอบ พลอทที่ปรับแต่งไว้ก่อนหน้านี้ก็ต้องกลายเป็นขยะไป งานที่ทำไปก็จะศูนย์เปล่า ผมก็เลยต้องไปศึกษา matplotlib เพิ่มเติม จากที่ปกติก็ใช้งานแค่แบบพื้น ๆ ก็ต้องมานั่งปรับแต่งอะไรด้วย matplotlib มากขึ้น สาเหตุที่ผมใช้ matplotlib นั้น มีด้วยกันหลายอย่าง อย่างแรกเลยคืองานส่วนใหญ่ที่ผมทำนั้นเขียนด้วย python อยู่แล้ว แล้ว matplotlib มันก็เป็น tools ที่อยู่บน python และใช้ร่วมกับ numpy ได้ การทำงานต่าง ๆ เลยง่ายขึ้น เหตุผลต่อมาคือ พลอทที่ได้มีคุณภาพที่ดีมาก ทั้งฟอนท์และตัวกราฟ มีระบบ antialiasing ที่ดีมาก ๆ ลองดูตัวอย่างได้ที่ screenshots ครับ และการใช้งานก็ค่อนข้างง่าย เพราะเลียนแบบ MATLAB มาค่อนข้างเยอะ แม้กระนั้นก็ตาม ... |
12 Apr 08 | by bow_der_kleine | tags เขียนโปรแกรม Python matplotlib MATLAB
IDE กับภาษาสคริปต์
ผมเป็นคนที่ไม่ชอบใช้ IDE อยู่แล้วจึงไม่ได้สนใจเรื่องนี้มากนัก แต่เมื่อไม่กี่วันมานี้ ผมได้อ่านบทความเรื่อง Are Dynamically Typed Languages The Next Big Thing? จริง ๆ ก็ไม่ได้เกี่ยวอะไรกับ IDE สักเท่าไร แต่พออ่านจบก็พอจะตอบคำถามเรื่อง IDE ของภาษาสคริปต์ได้พอสมควร (ที่ถูกต้องต้องเรียกว่าภาษาไดนามิค แต่เนื่องจากภาษาสคริปต์ที่ผมรู้จักทุกภาษาเป็นภาษาไดนามิค และส่วนมากคนก็รู้จักภาษาสคริปต์มากกว่าภาษาไดนามิค เลยขอใช้คำว่าภาษาสคริปต์แล้วกันครับ) คำถามแรกเลยคือ ทำไมไม่ค่อยมี IDE ดี ๆ สำหรับภาษาสคริปต์ คำตอบส่วนตัวของผมแบ่งไปได้สองประเด็นใหญ่ ๆ คือ โครงสร้างของภาษาสคริปต์ไม่เหมาะสมกับการพัฒนา IDE (คำตอบค่อนข้างกำกวม แต่จะอธิบายทีหลัง) กับการพัฒนาโปรแกรมด้วยภาษาสคริปต์มีความจำเป็นในการใช้งาน IDE น้อยกว่าภาษาคอมไพล์ คำถามต่อมาที่ผมตั้งขึ้นเองคือ ในการพัฒนาโปรแกรมด้วยภาษาสคริปต์ การใช้กับไม่ใช้ IDE อย่างไหนจะ productive กว่ากัน ? |
20 Mar 08 | by bow_der_kleine | tags เขียนโปรแกรม IDE Python Ruby PHP
Python Challenge : GodTower for geek
เมื่อวานผมได้เจอเกมเกมหนึ่งโดยบังเอิญ เกมที่ว่านี้มีลักษณะคล้าย ๆ GodTower อยู่หลายประการ เพียงแต่ว่าเป็น GodTower สำหรับ geek เท่านั้น เกมที่ว่าก็คือ Python Challenge ซึ่งเล่นเป็นด่าน ๆ และแต่ละด่านเราต้องหารหัสผ่าน จากข้อมูลที่ได้จากรูปภาพและคำใบ้ที่ เพื่อเข้าไปสู่ด่านถัดไป เหมือน GodTower ทุกประการ แต่จุดต่างอยู่ที่ว่า การจะหารหัสผ่านให้ได้นั้น แค่รูปภาพและคำใบ้นั้นไม่เพียงพอ เราต้องหาข้อมูลซึ่งซ่อนอยู่ให้ได้ก่อน (บางด่านการหาข้อมูลยากกว่าการหารหัสผ่านเสียอีก) จากนั้นจึงเขียนโปรแกรมประมวลผลจากข้อมูลดังกล่าว ซึ่งอาจจะได้คำใบ้เพิ่มเติม หรือได้รหัสผ่านเลยก็ตามแต่ บางด่านต้องแกะรหัสจากคำใบ้ รูปภาพ และข้อมูลหลายซับหลายซ้อนมาก กว่าจะหารหัสผ่านเจอ พอหารหัสผ่านเจอ การนำรหัสผ่านเปิดประตูไปด่านถัดไปยัง geek เล็ก ๆ เลย ซึ่งก็สนุก ท้าทาย และสร้างความปวดหัวให้กับผู้เล่นได้ดีทีเดียว นอกจากความสนุกและปวดหัวแล้ว จุดประสงค์ของการสร้างเกมส์นี้คือ การได้ฝึกฝนการเขียนโปรแกรมด้วยภาษา Python (หรืออาจเป็นภาษาอื่นแล้วแต่ความถนัด) ซึ่งทักษะการเขียนโปรแกรมในแต่ละด่านก็จะแตกต่างหลากหลายกันออกไป สำหรับกรณีที่ ... |
09 Mar 08 | by bow_der_kleine | tags เขียนโปรแกรม Python
โปรแกรมตัดคำภาษาไทย
คุณ sugree ได้เขียนวิธีแก้ปัญหานี้ไว้ที่บล็อกตั้งนานแล้ว ทั้งวิธียาว ๆ และวิธีสั้น ๆ แต่เนื่องจากการคอมไพล์โปรแกรม OpenOffice ต้องใช้เวลานานมาก ก็เลยเกิดอาการขี้เกียจเสียงั้น (เป็นนิสัยที่แย่มาก) อีกทั้งนาน ๆ ครั้งผมจะเขียนเอกสารภาษาไทยสักครั้ง (อย่างมากปีละสองครั้ง) ก็เลยลองหาวิธีอื่นดู วิธีที่ผ่านหัวมาวิธีแรกคือใช้ AbiWord หรือไม่ก็ KOffice แทน ปรากฏว่า AbiWord นี่หนักสุด เพราะทั้งอ่านและเขียนภาษาไทยไม่ได้เลย ส่วน KOffice ตัดคำภาษาไทยได้ห่วยมาก เลยนึกถึง ThaiLatex ขึ้นมา คนใช้ Ubuntu และ Debian จะได้เปรียบเรื่องนี้มาก เพราะการติดตั้งและใช้ ThaiLatex ง่ายเหมือนหยิบกล้วยที่ปอกไว้แล้วเข้าปาก (ต้องขอขอบคุณทีมงาน ThaiLatex ไว้ ณ ที่นี้ด้วยครับ) แต่ ThaiLatex ไม่ตัดคำภาษาไทย ต้องใช้โปรแกรม cttex ในการตัดคำต่างหาก ทีนี้แหละก็มาถึงปัญหาที่ต้องแก้ เพราะ cttex มันสร้างปัญหาให้เยอะพอสมควร อย่างแรกเลยคือ cttex ใช้คำสั่ง b ในการแยกคำแบบ zero space ซึ่งเป็นคำสั่งที่ Latex มันไม่รู้จัก ตอนคอมไพล์เลยเจอ error อื้อเลย ซึ่งแก้ได้โดยไปโพสต์ถามไว้ใน codenone โชคดีที่ช่วงนี้ codenone คึกคัก (กว่าแต่ก่อน) ก็เลยมีคนมาตอบเร็ว ... |
14 Feb 08 | by bow_der_kleine | tags เขียนโปรแกรม Python ภาษาไทย Latex
Method decoration in Python
ประโยชน์ของ Mix-ins หรือ Composite ใน Qi4j ที่ผมเห็นได้ชัด คือ การ reuse method ทำให้เราสามารถนำ method ของคลาสหนึ่ง ไปใช้ในอีกคลาสหนึ่งได้ ส่วนการ reuse attribute นั้น ผมรู้สึกเฉย ๆ แม้ว่าเราสามารถ reuse ได้ก็จริง แต่ขั้นตอนของการ reuse บางทีอาจจะซับซ้อน และเข้าใจยากกว่าการ เขียนขึ้นใหม่ หรือการใช้ Inheritance เสียด้วยซ้ำ ยิ่งใน Qi4j ผมคิดว่าเขียนใหม่น่าจะคุ้มกว่า ยิ่งมองด้วยมุมมองที่ว่าโค้ดเขียนครั้งเดียว แต่อ่านหลายครั้งแล้ว ความน่าใช้ของ Attribute Composite ของ Qi4j ก็ยิ่งลดลง ดังนั้นสิ่งที่ผมสนใจเป็นพิเศษ คือ Method Mix-ins ซึ่งผมก็มานั่งคิดดูว่า ทำอย่างไร เราถึงจะได้ประโยชน์สูงสุดจากการใช้งาน Method Mix-ins คำตอบที่ผมได้คือ การเขียนให้ทุก Behavior-Class มีหนึ่ง Method ช่วยเพิ่มความยืดหยุ่นในการผสมคลาส และไม่ทำให้คลาสมี Method มากเกินความจำเป็น แต่ก็มีข้อเสียคือ เสียเวลาในการผสมคลาสมากขึ้น เมื่อคิดได้ดังนั้น ผมก็คิดถึง Decorator ใน Design-pattern ขึ้นมา แต่ Decorator ใน Python จะต่างจาก Decorator ที่เรารู้จักจากตำราตรงที่ เราไม่จำเป็นสร้างคลาสขึ้นมา แต่สามารถใช้ฟังก์ชันเป็น Decorator ได้เลยโดยตรง ยกตัวอย่างเช่น ... |
20 Jan 08 | by bow_der_kleine | tags เขียนโปรแกรม Python Design Pattern

ในยุคที่ Web Application เข้ามามีบทบาทกับวงการไอทีมากขึ้น ทำให้ภาษาสคริปต์อย่าง PHP, Python หรือ Ruby ได้รับความนิยมมากขึ้นตามไปด้วย (แม้ว่าภาษาสคริปต์ทำอะไรได้มาก Web Application ก็ตาม) นักพัฒนาโปรแกรมที่คุ้นเคยกับภาษาคอมไพล์อย่าง Java, C++, C# หรือ VB บางส่วนจึงหันมาสนใจและศึกษาภาษาสคริปต์ คำถามแรก ๆ ที่นักพัฒนากลุ่มนี้ถามเมื่อเริ่มศึกษาภาษาสคริปต์คือ IDE แต่ก็ต้องผิดหวัง เพราะเป็นที่รู้ ๆ กันครับว่าภาษาสคริปต์มักไม่ค่อยมี IDE เจ๋ง ๆ ให้เลือกใช้งาน เหมือนกับภาษาคอมไพล์ (ถึงมีบ้างก็ไม่ดีเท่า หรืออาจไม่ใช่ IDE สำหรับภาษานั้น ๆ โดยเฉพาะ)
ผมได้รู้จักเกม
คนที่ใช้ Linux โดยเฉพาะอย่างยิ่ง Ubuntu คงจะรู้สึกอึดอัดขัดใจกับโปรแกรมสำคัญอย่าง OpenOffice ที่เวอร์ชั่นล่าสุดมีปัญหากับการใช้ภาษาไทย พอเขียนภาษาไทยได้สักสองบรรทัด โปรแกรมก็จะตายไปเฉย ๆ ทีแรกผมไม่ได้สนใจกับปัญหานี้มากนัก เพราะไม่ค่อยได้เขียนเอกสารภาษาไทย อีกทั้งเครื่องของคุณเช ฯ ซึ่งใช้ Ubuntu เหมือนกัน ก็ยังใช้ภาษาไทยได้ ก็เลยนึกว่าปัญหานี้ได้รับการแก้ไขแล้ว แต่เพิ่งรู้ทีหลังว่าเครื่องคุณเช ฯ เป็น Ubuntu 7.04 ซึ่งไม่มีปัญหานี้
ช่วงนี้อาจเขียนเรื่องเที่ยวเยอะ เพราะเพิ่งไปเที่ยวมา ด้วยความที่ผมกลัวว่าจะมีเรื่องเที่ยวมากเกินไป เดี๋ยวจะกลายเป็นเวบท่องเที่ยวไป เลยต้องเอาเรื่องเกี่ยวกับคอมพิวเตอร์มาสลับปรับเปลี่ยนบ้าง พอดีเข้าไปอ่านเรื่อง