ComBioLaw.De » Blog » เขียนโปรแกรม

อะไรที่ Python มี แต่ PHP ไม่มี และในทางกลับกัน

imageช่วงนี้ผมต้องเขียนโปรแกรมด้วยสองภาษาคือ Python กับ PHP เวลาสลับภาษาไปมาก็จะเกิดอาการงง ๆ เล็กน้อย ชอบเอา Features ของภาษานึงไปใช้กับอีกภาษา ชอบเขียน Syntax ผิด ฯลฯ พอมากเข้าก็รู้สึกได้ ว่าสองภาษานี้ต่างกันมาก การออกแบบที่มีที่มาและจุดประสงค์ที่ต่างกัน วิธีคิดเวลาเขียนโปรแกรมที่ต่างกัน เลยอยากลองสรุปดูว่า มันมีอะไรที่ผมได้ใช้ในภาษาหนึ่ง แต่กลับไม่มีในอีกภาษา

อันที่จริงบล็อกนี้ ก็ไม่ต่างกับเอกสาร Python vs PHP ใน Python Wiki เท่าไร และทั้งสองภาษาต่างก็มีความสามารถสำหรับเขียนโปรแกรมในรูปแบบต่าง ๆ ได้พอ ๆ กัน แต่ด้วยความสบายที่ต่างกัน หากคนที่เขียน PHP เป็นอยู่แล้ว และอยากลองเขียน Python (ในทางกลับกันคงหายาก) อาจนำไปใช้เป็น guideline ได้ครับ

สิ่งที่ Python มี แต่ PHP ไม่มี

1 string is a list ทำให้เรานำความสามมารถต่าง ๆ ที่มีอยู่ใน list มาใช้กับ string ได้ทันที รู้สึกได้ถึงความ powerful โดยเฉพาะการเรียกใช้ method ต่าง ๆ ใน PHP ฟังก์ชันที่ใช้กับ string และ array จะแยกออกจากกันเด็ดขาด ทำให้หลาย ๆ ครั้งต้องจำและทำความเข้าใจฟังก์ชั่นสองตัว ที่ทำงานเหมือนกัน แต่ตัวหนึ่งใช้กับ string อีกตัวใช้กับ array

2 in-statement เป็นอะไรที่อำนวยความสะดวกได้มาก เราสามารถใช้ in ตรวจสอบได้ว่า ตัวแปรหนึ่งเป็นสมาชิกของอีกตัวแปรหนึ่งหรือไม่ เช่น "abc" in "abcdef" จะส่งค่ากลับมาเป็น True และ 1 in [2, 3, 4]  จะส่งค่ากลับมาเป็น False เป็นต้น ใน PHP ต้องใช้ฟังก์ชั่น in_array , array_key_exists แล้วก็ strpos แทน (แยกฟังก์ชันตามประเภทตัวแปร) ซึ่ง in-statement ของ Python ง่ายกว่าเห็น ๆ แล้วมันเป็นอะไรที่ใช้บ่อยเสียด้วยสิ ...

เขียนโปรแกรม เขียนโปรแกรม

16 Jan 09 | by bow_der_kleine | tags เขียนโปรแกรม Python PHP

read 2425 comments 6 read more

Using Mix-ins with PHP

imageแม้ว่า PHP จะเป็นภาษาเขียนโปรแกรมที่ได้รับความนิยมอย่างมาก ตามความนิยมในตัว Web Application แต่ก็มีความสามารถหลาย ๆ อย่างที่ผมคิดว่า PHP ควรมี แต่กลับไม่มี หนึ่งในนั้นคือ multi inheritance ซึ่งดูเหมือนจะเป็นแฟชั่นแบบหนึ่ง ที่ภาษาเขียนโปรแกรมหลาย ๆ ภาษาไม่สนับสนุน multi inheritance แต่แนะนำให้ใช้ interface แทน ซึ่งจริง ๆ แล้วมันใช้แทนกันได้ไม่ทั้งหมด โดยเฉพาะอย่างยิ่ง ในกรณีที่เราต้องการใช้ algorithm บางอย่างในตัว method การใช้ interface ไม่สามารถช่วยให้เรา reuse การใช้งาน method หรือ algorithm เหล่านี้ได้

ทางแก้ที่โปรแกรมเมอร์มืออาชีพเขาแนะนำกัน คือการใช้งาน Mix-ins แต่อย่าเพิ่งเข้าใจผิดนะครับ ว่า PHP สนับสนุน Mix-ins การใช้งาน Mix-ins ใน PHP ต้องมีการแฮกกันเล็กน้อยถึงจะสามารถใช้งานได้ ซึ่งต่างจาก Ruby หรือ Python การใช้งาน Mix-ins ที่ผมจะเขียนถึงนี้ ผมเอามาจากเวบของ Ivo Jansch อีกทีครับ

Mix-ins เป็นวิธีการยืม method ของคลาสอื่นมาใช้ ซึ่งต่างจาก multi inheritance ตรงที่คลาสที่ยืม กับคลาสที่ถูกยืม ไม่ได้มีความสัมพันธ์กับแบบ subclass - superclass ต่างจาก interface ตรงที่ interface กำหนดเพียงแค่ชื่อ method เท่านั้น ส่วนเนื้อใน method ก็ต้องไปกำหนดเองอีกที และต่างจาก method decoration ตรงที่ method decoration ไม่ต้องมีการสร้างคลาส โดยส่วนตัว ผมชอบ method decoration มากที่สุด แต่ PHP มันทำไม่ได้

แกนหลักของ Mix-ins ที่ผมจะเขียนถึงคือ การใช้ method ที่มีชื่อว่า __call ซึ่งทุกคลาสใน PHP จะมี method ชื่อนี้อยู่ ...

เขียนโปรแกรม เขียนโปรแกรม

21 Dec 08 | by bow_der_kleine | tags เขียนโปรแกรม PHP

read 1421 comments 3 read more

Play PIL (Python Image Library) with NumPy

image พอดีใน Blognone มีคนเข้ามาถามเกี่ยวกับ Image Processing ด้วย Python โดยการใช้โมดูลของ Python ที่มีชื่อว่า PIL (Python Image Library) ทีแรกผมคิดว่าจะตอบในฟอรั่มโดยตรง แต่ดูท่าจะยาว เลยเก็บมาเขียนเป็นบล็อกแทน

PIL ถือเป็นโมดูลสำหรับ Image Processing ที่ทรงพลัง ใช้งานง่าย และสนับสนุนไฟล์ภาพหลายรูปแบบด้วยกัน (ดูฟอร์แมตภาพที่ PIL สนับสนุนได้ที่  PIL Handbook)  ความสามารถของ PIL ครอบคลุมงานเกี่ยวกับ Image Processing ที่ใช้งานปกติได้เกือบทั้งหมด แต่ทั้งนี้ทั้งนั้นยังมีงานบางประเภทที่เราต้องออกแรงเขียนโปรแกรมเอง ตัวอย่างการเขียนโปรแกรมด้วย PIL สามารถดูได้ที่ เอ็นโปรเทค ซึ่งจากตัวอย่างจะเห็นได้ว่า เราสามารถเขียนโปรแกรมร่วมกับ PIL ได้โดยใช้ Python List ด้วยวิธีการดังกล่าว เราต้องวนลูปหลาย ๆ รอบ เพื่อรับค่าแต่ละ Pixel จากรูปภาพ แล้วนำไปประมวลผลอีกครั้งหนึ่ง ผลที่ได้คือ การเขียนโปรแกรมที่ซับซ้อน และทำงานช้า

ด้วยความที่ผมทำงานกับ NumPy ทุกวี่วัน ก็เลยอดไม่ได้ที่จะนำ PIL มาทำงานร่วมกับ NumPy เพื่อผนึกกำลังสองความสามารถให้เป็นหนึ่ง นำการคำนวนแบบ numerical ของ NumPy มาใช้ในงาน Image Processing ทำให้การคำนวน และประมวลผลต่าง ๆ ง่ายขึ้น มีประสิทธิภาพมากขึ้น และสามารถนำฟังก์ชั่นทางคณิตศาสตร์อื่น ๆ ของ NumPy และ SciPy มาใช้งานร่วมกับ PIL ได้

การแปลงรูปภาพให้อยู่ในรูปของอะเรย์สำหรับ NumPy นั้น สามารถทำได้ง่าย ๆ ด้วยคำสั่ง ...

เขียนโปรแกรม เขียนโปรแกรม

27 Jul 08 | by bow_der_kleine | tags เขียนโปรแกรม Python PIL NumPy Image Processing

read 3452 comments 4 read more

เก็บตก Webapplication technologies

imageหลังจากที่เขียนบล็อกเรื่อง Webapplication technologies ไป โดยโปรยคำขึ้นต้นด้วยสำนวน "ความทรมานในการเลือก"  เพราะ Webapp มีเทคโนโลยีมากมายให้เลือกจนปวดหัว ดูเหมือนว่าความทรมานในการเลือกจะไม่พอเพียงสำหรับคนเขียน และคนอ่าน เพราะมีผู้อ่านหลายท่าน แนะนำให้ทดสอบเทคโนโลยีอื่นเพิ่มเติม และคนเขียนก็เห็นดีเห็นงามไปด้วย ก็เลยเขียนบล็อกนี้เพิ่มเติม เป็นการเก็บตกเทคโนโลยีที่ยังไม่ได้ทดสอบ

เทคโนโลยีที่ผมทดสอบเพิ่มเติมได้แก่ WSGI, mod_wsgi สำหรับ python และ FCGI, mod_proxy_balancer สำหรับ ruby นอกจากนี้ผมยังได้ปรับปรุง และเพิ่มเติมการทดสอบอีกเล็กน้อย

WSGI เป็นมาตรฐานใหม่ที่ถูกกำหนดลงไปใน PEP 333 เพื่อใช้ในการติดต่อเชื่อมโยงระหว่าง Webserver และ Webapp โดยเอาแนวคิดมาจาก Servlet ของ Java ซึ่งการเขียน Webapp โดย WSGI นั้นค่อนข้าง lowlevel พอสมควร ทำให้ไม่สะดวกสบายเหมือนใช้ mod_python การใช้งาน WSGI นั้นสามารถใช้งานได้สองรูปแบบคือเขียนโปรแกรมเป็น Stand-Alone Webserver แบบ Mongrel หรือเชื่อมต่อระหว่าง Webserver กับตัว Webapp คล้าย ๆ mod_python

หากจะเขียนโปรแกรมแบบ Stand-Alone ผมเข้าใจว่า เวลาติดตั้ง python เสร็จแล้ว สามารถใช้งาน wsgiref ซึ่งเป็นโมดูลสำหรับเขียน Webserver แบบง่าย ๆ ได้เลย ไม่ต้องติดตั้งโมดูลเพิ่มเติม แต่เนื่องจากใน Debian และ Ubuntu แพกเกจ wsgiref มันแยกออกมาต่างหากเลยต้องติดตั้งเพิ่มเติม ด้วยคำสั่ง ...

เขียนโปรแกรม เขียนโปรแกรม

12 Jun 08 | by bow_der_kleine | tags เขียนโปรแกรม ไอที Webapplication Java JSP PHP Python Ruby

read 2089 comments 9 read more

Webapplication technologies

imageด้วยความที่ระยะหลังไม่ว่าโปรแกรมอะไรก็ถูกทำให้เป็น Webapplication ไปเสียหมด เทคโนโลยีที่เกี่ยวข้องกับ Webapplication จึงออกมามากมาย ถึงขั้นเกินความต้องการ เหมือนสำนวนเยอรมันที่ว่า "Qual der Wahl" ซึ่งแปลได้ว่า ความทรมานในการเลือก มีให้เลือกตั้งแต่ภาษาที่ใช้, API, Framework, Web-server และรายระเอียดปลีกย่อยต่าง ๆ อีกมากมาย

ในอินเตอร์เนตก็มีคนรีวิวเทคโนโลยีต่าง ๆ เหล่านี้ให้อ่านอยู่บ่อย ๆ แต่บางครั้งอ่านไปก็ไม่มีข้อมูลที่ผมอยากรู้ อีกทั้งผมเห็นว่าหากทดสอบเทคโนโลยี่ต่าง ๆ ด้วยตัวเอง จะทำให้ผมได้ความรู้สึกในการใช้งานเทคโนโลยีนั้นมากกว่า ก็เลยคิดว่าน่าจะลองทดสอบเทคโนโลยีต่าง ๆ เหล่านี้ด้วยตัวเอง ไปเรื่อย ๆ เพื่อเก็บเป็นฐานข้อมูลส่วนตัว

ในขั้นแรกผมจะทดสอบเทคโนโลยีพื้นฐานก่อน นั่นคือตัวภาษาเขียนโปรแกรม ซึ่งผมเลือกมา 4 ภาษาได้แก่ Java (Java EE), PHP, Python และ Ruby เหตุผลไม่มีอะไรมาก เพราะพอเขียนได้อยู่ 4 ภาษานี้ และเป็นภาษาที่ได้รับความนิยม การทดสอบที่ผมจะเริ่มคือโปรแกรม "Hello World !" เพื่อดูการความยากง่ายในการติดตั้งและเซทอัพระบบ และดูประสิทธิภาพพื้นฐานของ Web-server แต่ละตัว โดยใช้ Ubuntu-8.04 เป็นระบบปฏิบัติการและ reference ...

เขียนโปรแกรม เขียนโปรแกรม

01 Jun 08 | by bow_der_kleine | tags เขียนโปรแกรม ไอที Webapplication Java JSP PHP Python Ruby

read 3981 comments 34 read more

Search

Navigation

รวมลิงก์น่าสนใจ

ความเคลื่อนไหว

Login

name password

ลืมรหัสผ่าน