Programming

The League of Extraordinary Programming Languages in Thailand

ภาษาสำหรับเขียนโปรแกรมในโลกนี้มีมากมาย แต่ภาษาที่ได้รับความนิยมสูงนั้นมีไม่กี่ภาษา ซึ่งก็มีผลให้ภาษาอื่นที่ไม่ได้รับความนิยมก็ยังคงไม่ได้รับความนิยมต่อไป ในความเป็นจริงแล้ว ทุกภาษามีจุดประสงค์ของตนเอง การเลือกภาษาจึงเป็นเรื่องของความเหมาะสมมากกว่าอารมณ์ และความรู้สึก แต่เอาเข้าจริงการเลือกภาษาสำหรับงานซักงานก็เป็นเรื่องของ The One ที่มีอำนาจตัดสินใจ ถ้าเป็นงานส่วนตัวคุณก็คือ The One แต่โชคร้ายงานส่วนตัวมักจะไม่ใช่งานทำเงิน สุดท้ายก็มี The One มาเลือกภาษาให้เสร็จสรรพ ภาษาที่เลือกมาแต่ละทีก็มักเป็นภาษาที่ค่อนข้างเป็นที่รู้จัก ยกตัวอย่างเช่น PHP Java และ C# ซึ่งก็ไม่แปลกอะไร นี่เรียกว่า ทีใครทีมัน หรือ ทีเอ็งข้าไม่ว่า ทีข้าเอ็งอย่าโวย ตรงตามหลักการเป๊ะ ถ้าทำงานประจำแล้วต้องทำตามการตัดสินใจของ The One แล้วเก็บกดก็จงกลับบ้านมาเขียนโปรแกรมด้วยภาษาที่ชอบซะ ยิ่งถ้าอยากให้คนอื่นหันมารู้จักภาษา นั้นกับเราด้วยก็ต้องแจกโค้ดของเราซะบ้าง นี่ไม่ใช่การเผยแพร่ลัทธิหรือศาสนาอะไรทั้งสิ้น เพราะเราทำสิ่งที่ชอบ ไม่ได้บังคับให้ใครทำตาม ถ้ามีคนเห็นว่าเราทำดี เค้าอยากทำบ้างก็ไม่แปลกอะไร มีคนบอกว่าภาษาพวกนี้เรียกว่า ภาษานอกกระแส (mk rawitat) มันก็ใช่อยู่ แต่ผมไม่อยากให้คิดว่ามันเป็นแค่ทางเลือกซักเท่าไหร่ ฟังดูแล้วเหมือนมีความสำคัญน้อยไปนิด เลยขอเรียกเป็น Extraordinary ดีกว่า ฟังแล้วดูยิ่งใหญ่ดี จะได้ไม่ด้อยกว่าภาษาอันโด่งดังทั้งหลาย ช่วงนี้กำลังมีการระดมพลของผู้ที่มีภาษาแปลกๆ ในดวงใจ ผมก็เป็นหนึ่งในนั้นเหมือนกันเลยต้องเขียนถึงซะหน่อย

Implementing barrier in Pthreads

According from my previous post, the most useful thing in parallel programming is barrier. Usually, barriers are available in Pthreads at least below 3 functions.

int pthread_barrier_destroy(pthread_barrier_t *barrier);
int pthread_barrier_init(pthread_barrier_t *barrier,
      const pthread_barrierattr_t *attr, unsigned count);

int pthread_barrier_wait(pthread_barrier_t *barrier);

Unfortunately, above functions may be not available on some architecture, e.g., Cygwin. That's why I need to implement one.

Parallel Programming with Pthreads

As of today, parallel programming paradigm has been backed for a while in processor level so all of us should change programming model to utilize this advanced architecture efficiently. The easiest way to consume all processor is to use multi-threaded model. In particular, you need to know basic concept of thread in general and POSIX Threads aka Pthreads for specific implementation.

Let's translate

Drupal 5 RC1 has been released for a while. In this version, strings are frozen. All translators are encouraged to contribute again. I have merged the translated strings in Drupal 4.7 to Drupal 5. You are welcome to make Drupal 5 the perfect CMS for Thai.

Create Python package with dependencies using setuptools

I have not worked with packaging Python module for so long. It seems distutils was deprecated since Python 2.4. The recommendation is to use setuptools instead. It offers lots of useful functionalities, e.g., easy install with automatic dependencies resolver.

To create a package with setuptools, the package should have

pyedxl - a python library for handling EDXL

I am proud to announce my latest work called which is a python library for handling OASIS Emergency Data Exchange Language (EDXL) Distribution Element. At this time, it partially supports most of specification version 1.0 published on March 14, 2006. The main purpose to develop this library is to learn how to use lxml effectively. For those who can't stand to read, you might directly go to the .