อัพเกรด bash

เขียน 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 ที่ผิดหลายที่

วิ่งวน วุ่นวาย

งานซ้อน
งานชน
วิ่งวน
วุ่นวาย

แปลกนะ ทำไมทำงานหลายอย่าง หลายต่อหลายอย่าง วิ่งวนไปวนมาหลายที่ ….. กลับไม่ค่อยรู้สึกเหนื่อยเท่าไหร่

แต่ทำไมนะ ….. หลายครั้งที่ไม่ได้เป็นแบบนั้นกลับเหนื่อยเสียดื้อๆ

9/07 Solaris Express Developer Edition

เปล่า ไม่ได้ review ครับ เพิ่งจะได้แผ่นมา ตัวนี้ครับ

เมื่อก่อนต้องมานั่ง download วุ่นวาย ส่วนมากจะต้องผ่าน download manager ของ Sun เอง ซึ่งทำได้ห่วยมาก (แบ่งไฟล์ตอน download จะได้เร็วๆ ก็ไม่ได้) แต่ว่่าตอนนี้สั่ง Free DVD ได้เลย ซึ่งเข้าท่าดี เหมือนกับ ShipIt ของ Ubuntu เลย

รู้สึกว่า trend นี้จะมาแฮะ ให้ request พวก open source/free software เป็น packaged DVD/CD เนี่ย เพราะว่าบางที net มันห่วย download ก็ไม่ค่อยจะได้เรื่องเท่าไหร่ บางทีก็ไม่ค่อยสะดวกนัก อิืมมม ให้สั่ง portable bandwidth ดีกว่า (ผมมอง CD/DVD/อะไรก็ได้ ว่ามันเป็น portable bandwidth น่ะ :-P) แต่ว่าจะทำได้มันก็ต้องเงินถุงเงินถังพอสมควร เพราะว่าถ้าคน order เยอะ ถึงแผ่นมันจะไม่กี่ตังค์ก็เถอะ แต่ว่าถ้าหลายแผ่น ก็คงจะบานปลายง่ายๆ เหมือนกัน

หรือว่าคนคงไม่ค่อยจะ order Solaris DVD เท่าไหร่มั้ง :-P (แต่ว่า Ubuntu นี่คงจะอีกเร่ือง)

เล่น Solari ครั้งสุดท้ายเมื่อนานมากแล้ว ไว้ครั้งนี้หาเครื่องมาเล่นมันได้ก่อน (ยังไม่รู้ว่าจะ dedicate เครื่องที่ lab เครื่องไหนไปเล่นมันดี) แล้วจะมา review ให้ฟังนะครับ

Web Services: REST vs. SOAP

อ้างอิง: Blognone: REST vs. SOAP Web Services โดย krunapon

ผมอ่านข่าวนี้ที่ blognone ด้วยความรู้สึกอยากจะตะโกนในใจว่า Take the Red Pill! Welcome to the Real World! ยังไงก็ไม่รู้

ใช่ครับ ถึงมันจะไม่ใช่ข่าวที่มีการประกาศใหญ่โตมโหฬาร (แบบ MS, Sun, IBM หรือว่าบริษัทชื่อใหญ่ๆ โตๆ ออกมาให้การสนับสนุนหรือว่าจับมือกันให้ความร่วมมือในเรื่องอะไรสักอย่าง) ที่อาจจะ catch ความสนใจและ convince คนที่อยู่ใน mainstream ได้ง่ายกว่า แต่ว่าก็ดีเหมือนกันที่คนเริ่มลืมตามองความเป็นจริงอันโหดร้ายของ SOAP-based Web Services มากขึ้น

ในหลักการแล้ว SOAP มันก็เป็น protocol ที่ดีนะ แต่ว่าในความเป็นจริงแล้ว เนื่องจากความต้องการของการใช้ Web Services ในปัจจุบัน มันเป็นการเข้าถึง resource แบบ CRUD เสียเป็นส่วนมาก การใช้งาน SOAP-based ในความรู้สึกของผม มันเลยกลายเป็นการขี่ช้างจับตั๊กแตนไปโดยใช่เหตุ และจะต้องมีองค์ประกอบอะไรต่างๆ มากมาย อีกทั้งปัญหาอย่างหนึ่งที่ตามมาในโลกความเป็นจริง ก็คือ ความหลากหลายของข้อมูล ความร้อยพ่อพันแม่ของ representation ทำให้การกำหนดมาตรฐานของ SOAP นั้น นับวันมันจะมีแต่ใหญ่ขึ้น และ bloated ขึ้นอย่างใช่เหตุ …. วิธีการ scale ของ SOAP มันสร้างความยุ่งยากและลำบากเอาเรื่อง

ก็เลยทำให้ตัว S ใน SOAP ซึ่งควรจะย่อมาจาก Simple กลายเป็นเรื่องตลก เพราะว่ามันเป็นทุกอย่าง ทุกอย่างจริงๆ นอกเหนือจาก Simple มันมีทุกอย่าง นอกจาก Simplicity

ที่เขียนนี่ ไม่ได้แปลว่า SOAP ไม่ดี หรือว่า REST คือคำตอบสำหรับทุกอย่างนะ ใครที่รู้จักผมจะรู้ดีว่า สำหรับกรณีแบบนี้ ผมแทบไม่เคย claim คำว่า 100% เพราะว่า exception มันมีแทบทุกเรื่องน่ะแหละ ยากที่จะหาอะไรบางอย่างที่มันเป็นจริงในทุกกรณี .. แต่ว่า exception มันจะต้อง catch และ handling แยกต่างหาก ไม่ใช่ยกมาพูดเป็น counter example หักล้างกับ general cases อยู่เรื่อยไป จนลืม handling กรณี “ทั่วไป” (general cases) อีก 80% ของกรณีทั้งหมด… เช่นกรณีนี้ คือ (น่าจะกว่า) 80% ของความต้องการการใช้งาน Web Services ในปัจจุบันนั้นคือ request resources แบบ remote ซึ่ง REST มันดีกว่าจม และไปอยู่บน (= ใช้ความสามารถของ) protocol ที่มาตรฐานมาก คือ HTTP อีกตะหาก

ในขณะที่บริษัทใหญ่ๆ ที่ชอบนั่งกำหนด standard ก็ยังคงบ้ากับ SOAP-based standard spec กันต่อไป บริษัทใหญ่ๆ ที่ต้องทำงานให้บริการข้อมูลจริงในโลกความเป็นจริง เช่น Google หรือ Amazon (ที่ Web Services มีผลอย่างมากกับ model ทางธุรกิจของตัวเองด้วย) กลับมีแนวโน้มจะกลับมาใช้ REST เพิ่มขึ้นเรื่อยๆ นี่ยังไม่นับถึงบริษัทเล็กๆ อีกนับร้อยนับพัน ที่ต้องให้บริการข้อมูลจริง เชื่อมโยงจริง ใช้งานจริง เป็นส่วนหนึ่งของระบบนิเวศน์ของข้อมูลขนาดใหญ่จริง .. ที่ใช้งาน WS แบบ REST มากกว่าที่จะเลือก SOAP (คนใช้ SOAP มันก็มีนะ ไม่ใช่ไม่มี)

การทำงานในโลกความเป็นจริง บางทีมันมีอะไรที่มากกว่า เรียบง่ายกว่า และ work กว่าการทำงานตามกฏเกณฑ์ข้อกำหนดข้อบังคับ ที่นั่งกำหนดกันบนกระดาษ ด้วยความรู้สึกที่ว่า ถ้าเป็นแบบนี้การทำงานจริงจะราบรื่น การทำงานจริงจะไม่มีปัญหา ฯลฯ หลายครั้ง สุดท้ายก็ต้องกลับสู่ความเรียบง่าย ด้วยการกลับมาดูธรรมชาติของตัวงานจริง

และ SOAP vs. REST ก็เป็นอีกบทพิสูจน์หนึ่ง …. ที่ยังคงดำเนินต่อไป

ปล. จริงๆ ผมเคยเขียน blog เรื่อง SOAP หรือว่าทำนองบ่นๆ เรื่อง SOAP ไปแล้วหลายครั้ง

เทอมหน้าวิชา WWW Programming ในส่วนของ Web Services จะสอน REST Web Services เป็นหลัก ส่วน SOAP คงจะยกยอดไป “ถ้ามีเวลา” แทน

[update 1]: ลืมไป ว่าเมื่อไม่นานมานี้ Tim Bray จาก Sun Microsystems ได้มาพูดถึง REST ไว้ด้วย และน่าสนใจทีเดียว และเขียนไว้หลายบทความ รวมถึงการให้สัมภาษณ์หลายครั้งด้วย ลองหาอ่านๆ ได้จาก blog ของเค้าครับ

  • tbray.org (link นี้เฉพาะในส่วนของ Web Services Technology เท่านั้นนะครับ) ภายในแต่ละ link ค่อนข้างยาวทีเดียว น่าอ่านครับ
  • InfoQ: Tim Bray on Rails, REST, XML, Java and More อันนี้สัมภาษณ์
  • Tim Bray: Issues in Web Frameworks เป็น PDF ของ slide ที่ Bray ไปพูดเรื่องเกี่ยวกับ Web Frameworks ครับ มีเรื่อง Web Services ด้วย

[update 2]: เพิ่งอ่านที่ James Clark เขียนเรื่อง Bytes not Infosets ที่ remark น่าสนใจหลายเรื่องเหมือนกัน ที่อาจจะไม่เกี่ยวกับ SOAP vs. REST ตรงๆ แต่ว่าโดนหางเลข เนื่องจาก WS-* แบบ SOAP มัน emphasis กับ XML infosets มากเลย …. และ James Clark (คนที่เราน่าจะฟังมากที่สุดคนนึงในเรื่องของ XML) ก็มี remark ว่า

My conclusion is this: one aspect of the WS-* approach that should not be carried over to the REST world is the emphasis on XML infosets.

เห็นด้วยไม่รู้จะเห็นด้วยยังไง

[update 3]: minor clarifications added

Permalink ใน RSS feed ผิด….

ความผิดพลาดของผมเอง บางทีแก้ post อันเก่าในช่วงหัวเลี้ยวหัวต่อระหว่างวัน … ทำให้ permalink ของ post บางอันมันเปลี่ยนไป เช่น จาก feed

http://www.rawitat.com/2007/10/03/how-to-become-a-hacker/

แต่ว่าเนื่องจากผมไปแก้อะไรมันนิดหน่อย แล้วก็ re-post ไปใหม่ เมื่อขึ้นวันใหม่ไปเรียบร้อยแล้ว มันก็เลยกลายเป็น

http://www.rawitat.com/2007/10/04/how-to-become-a-hacker/

ไปแทน (สังเกตวันที่ใน permalink นะ)

คนที่ feed ไปหลังจากที่ผมแก้ ก็จะได้ feed ถูกต้องนะครับ แต่ว่าสำหรับคนที่ feed ไปก่อนหน้านั้นก็รบกวนช่วยตามมาอ่านในอีกวันนะครับ

เรื่องนี้ต้องขอโทษจริงๆ เพราะว่าลืมคิดไปสนิทเลย ว่าวันที่มันเปลี่ยน permalink ก็จะเปลี่ยน พอดีลองมา clickๆ ใน feed reader ของตัวเองก็เลยพบเข้า

เศร้าใจ

อ๊ะๆ อย่าคิดว่าเรื่องเดิมๆ นะ คนละเรื่องๆ :-D

ดูกระทู้ forum C/C++/VC/MFC ที่ thaidev.com แล้วเศร้าใจยังไงก็ไม่รู้ …. (เข้าไปดูก็จะรู้ว่าเรื่องอะไร … )

ทั้งๆ ที่น่าจะชินได้แล้วนะ หรือว่าเพราะว่าช่วงนี้มันเริ่มปิดเทอม ต้องส่งงานมากขึ้น พวกที่พอกๆ หางหมูมานาน ก็เลยรีบ post ถามกันมากมายก็ไม่รู้

เมื่อก่อนคงจะเข้าไปบ่นๆ สอนๆ บ้างล่ะนะ (แต่ว่าไม่ค่อยจะให้ code ล่ะ ส่วนมากถ้าจะช่วยก็จะให้ post code มา แล้วช่วยบอกตรงที่ผิดมากกว่า)… แต่ว่าตอนนี้ มันเริ่มจะซ้ำซาก ก็เลยนั่งปลงซะมากกว่า แต่ว่าพักนี้มันเยอะหน่อยอ่ะ ก็เลยเศร้ามั้ง

อ่อ .. แล้วใครที่เล่น thaidev.com นะ ปกติเวลาผม post ที่นั่นจะใช้ชื่อว่า rp

How to Become A Hacker

บทความที่ดีมาก….

ผมอ่านเรื่องนี้นานมากแล้ว ตั้งแต่เรียนปริญญาตรีได้มั้ง และเป็นหนึ่งในบทความในหัวใจเลย ต่อมาก็กลายเป็น source of inspiration หนึ่งที่ทำให้ผมเขียนบทความ (ที่ยังเก็บต้นฉบับไว้อยู่ แต่ว่าขี้เกียจรื้อ) เรื่อง Hackers: Their True Stories

Hacker คือ ฮีโร่ของผมมาตลอด แต่ว่าคำๆ นี้ ในสายตาของ public แล้ว พวกที่ถูกเรียกว่า Hacker หรือว่าพวกที่สื่อต่างๆ และหลายๆ คนเรียกว่า Hacker คือคนไม่ดี ที่คอยทำลายระบบต่างๆ รื้อข้อมูล ทำลายข้อมูล เอาข้อมูลที่ไม่ได้รับอนุญาตไปใช้ในทางไม่ดี หรือแม้แต่อะไรที่เบาและแรงกว่านั้น​ (ตั้งแต่แงะซอฟต์แวร์ไปเรื่อย ถึงสร้างความเสียหายระดับชาติ)

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

บทความของ ESR นั้น ถ้าอ่านดีๆ และปฏิบัติตามได้จริงๆ คุณอาจจะกลายเป็น Hacker ก็ได้ ใครจะไปรู้ ….

ส่วน Hacker คืออะไรกันแน่? ถ้าอยากจะรู้คำตอบ ก็ลองเริ่มอ่านบทความนั้นดู แล้วอ่านไปอ่านมาคุณจะพบคำตอบเอง ..​ อ๊ะๆ อย่าบอกว่ามันเป็นภาษาอังกฤษเลยไม่อ่านนะ ถ้าแค่นี้เป็นกำแพงที่คุณไม่อยากข้ามแล้วล่ะก็ คุณคงจะเป็น Hacker ลำบากล่ะครับ

ก่อนที่จะถามผมนะ ว่า แล้วจะเป็นไปทำไมล่ะ ทำไมฉันถึงต้องเป็นด้วย …. ก็ลองถามตัวเองดูก่อนนะครับ ว่าอ่านชื่อบทความ อ่านที่ผมเขียนมาแล้ว สนใจมั้ยล่ะ ถ้าไม่สนใจ ก็คงจะปกติที่คุณจะถามเช่นนั้น แต่ว่าถ้าสนใจ ก็จะรอช้าอยู่ทำไม (ใบ้นิด: มีคนแปลเป็นไทยไว้ด้วย แต่ว่าไม่แน่ใจว่า revision มีคนแปลหรือยัง…)

หนังสือที่อยากได้ (Complex Systems) และ amazon.com

เมื่อวานนี้ Amazon ส่ง e-mail มาโฆษณาหนังสือ … เห็นเล่มนี้แล้วอยากได้มาก



Complex and Adaptive Dynamical Systems: A Primer โดย Claudius Gros มีกำหนดออกวันที่ 1 พย. ปีนี้ น่าจะเป็นของขวัญวันเกิดให้ตัวเองได้ดีเลยนะเนี่ย

มี description (เอามาจาก Amazon):

We are living in an ever more complex world, an epoch where human actions can accordingly acquire far-reaching potentialities. Complex and adaptive dynamical systems are ubiquitous in the world surrounding us and require us to adapt to new realities and the way of dealing with them.

This primer has been developed with the aim of conveying a wide range of “commons-sense” knowledge in the field of quantitative complex system science at an introductory level, providing an entry point to this both fascinating and vitally important subject.

The approach is modular and phenomenology driven. Examples of emerging phenomena of generic importance treated in this book are: – The small world phenomenon in social and scale-free networks; – Phase transitions and self-organized criticality in adaptive systems; – Life at the edge of chaos and coevolutionary avalanches resulting from the unfolding of all living; – The concept of living dynamical systems and emotional diffusive control within cognitive system theory.

Technical course prerequisites are a basic knowledge of ordinary and partial differential equations and of statistics. Each chapter comes with exercises and suggestions for further reading – solutions to the exercises are also provided.

อยากได้ชะมัด .. นี่ถ้ายังอยู่ญี่ปุ่นนี่คงจะสั่งไปแล้วนะเนี่ย..

นี่แหละ power ของการเก็บข้อมูล และการวิเคราะห์พฤติกรรมผู้ใช้ ผมเคยซื้อหนังสือเกี่ยวกับ Chaos Theory, Fractals, Complex Systems theory จาก Amazon ไว้หลายสิบเล่ม (นอกจากหนังสืออื่นๆ นะ ไว้วันหลังจะทำ reading list ให้) ไม่พอนะ ผมอาจจะมีพฤติกรรมการซื้อหนังสือจากสำนักพิมพ์ Springer เยอะด้วย พอเอาข้อมูลนี้มาวิเคราะห์นะ ระบบ computer ที่ Amazon ก็เลยไม่ลังเล (computer มันลังเลเป็นที่ไหน) ในการที่จะส่ง e-mail มาบอกผมว่า มีหนังสือใหม่เล่มนี้นะ สนมั้ย

  • ถ้า Amazon ส่งโฆษณามามั่ว มีหนังสือใหม่อะไรก็ส่งมาหมด ผมก็คงสั่งโปรแกรม e-mail client ของผมให้ filter มันไปเป็น junk แบบถาวร
  • ถ้าส่งมาแบบ 50 mail มีดีซักอัน ผมก็คงจะ filter มันเข้าไปอยู่ใน mailbox ที่ไม่สำคัญ อยากอ่านก็อ่านอยากลบก็ลบ (แต่ไม่ใช่ junk) แล้วปกติก็จะลบมากกว่าอ่าน
  • ถ้ามันส่งมาแบบ 10 mail ผมคิดว่าเข้าท่าซัก 1 เนี่ยสิ ค่อยน่าสนหน่อย

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

ซึ่งมันก็เป็น hit-and-miss

แต่ว่าทุกครั้งที่ผมซื้อ Amazon ก็ยิ่งมีโอกาสได้เงินจากผมมากขึ้นในอนาคต

การใช้ computer และทฤษฎีต่างๆ อย่างฉลาดในเชิงธุรกิจ บางทีมันเพิ่มโอกาสในการทำธุรกิจ ในการขายของ ในการเชื่อมโยง ในการบริหารจัดการมากขึ้นอย่างมากมาย

แต่น่าเสียดาย (อีกล่ะ พักนี้มีแต่เรื่องน่าเสียดาย) ที่หลายๆ คนในบ้านเราที่ศึกษาทฤษฎี ไม่สามารถนำตรงนี้ไปใช้งานจริงได้เท่าไหร่ และไม่สามารถประยุกต์ใช้ในเชิงธุรกิจได้อย่างมีประสิทธิภาพเท่าที่ควร หรือไม่ได้เอาเสียเลย

ปล. ใครมีประสบการณ์สั่งหนังสือจาก Amazon พักหลังๆ ช่วยบอกหน่อยนะครับ ว่าดีมั้ย (การขนส่งและ delivery นะ) เพราะว่าเคยสั่งครั้งนึงเมื่อนานมาแล้วตอนกลับมาเยี่ยมบ้าน ตอนนั้น delivery ในบ้านเราห่วยสุดๆ…. เลยเข็ด

ทำไม arithmetic ในคอมพ์จึงยาก?

วันก่อน peter (ซี้เก่าสมัยเรียนที่ Tsukuba) ส่งเรื่อง bug ใน Excel 2007 มาให้อ่าน (อันที่ peter ส่งมาไม่ใช่อันนี้นะ แต่ว่าก็เรื่องเดียวกัน)



ก็ตกใจเล็กน้อยนะ แต่ว่าก็ไม่ได้มากอะไร เพราะว่าจริงๆ ก็รู้อยู่ว่า computer arithmetic มันยาก …..

อ่าว มันจะยากได้ไงล่ะ ก็วิธีการก็รู้ๆ กันอยู่นี่นา จริงๆ แล้วไม่หรอก เพราะว่าการทำ computer arithmetic มันมีปัจจัยเยอะมาก .. อย่างที่ว่าน่ะแหละ devils are in details … แทบทุกเรื่องน่ะแหละ เราจะลง details แค่ไหนเท่านั้นเอง

พอดีไปเจอนี่มา

ที่มีคำอธิบายค่อนข้างจะละเอียด แต่ว่าอ่านตามได้ง่ายๆ และที่สำคัญ ถ้าใครคุ้นๆ ชื่อ ก็คงจะร้องอ๋อ ว่านี่มันพวกที่ทำ Mathematica ซึ่งเป็น Mathematical Package ที่ถือกันว่าดีที่สุดตัวหนึ่งนี่นา (มีชื่อมากเรื่องประสิทธิภาพ เรื่อง programmability .. ภาษา Mathematica นี่สุดยอดมากเหมือนกัน และเรื่องความแม่นยำ — แต่ว่าแพงมาก) ใน blog นั้นเขาเขียนขาย/เชียร์ Mathematica มากไปนิด (ก็แน่นอน) ผมก็เลยเอาใจความตรงที่เป็นสาระของเรื่องนี้มาเขียนให้อ่านกันใหม่เป็นภาษไทยก็แล้วกันนะ ตามนี้เลย

  • มันยากเพราะว่าวิธีการทำ arithmetic ที่อยู่ในตำราคณิตศาสตร์เบื้องต้น (วิธีที่เราชอบคิดกัน) มันไม่มีประสิทธิภาพเพียงพอ เช่นการคูณเลข ถ้าเราต้องการคูณเลขที่มีตัวเลขทั้งหมด n ตัว จะต้องใช้การคูณทั้งหมด n^2 ครั้ง แต่ว่าจริงๆ แล้วจาก algorithm ขั้นสูง เราก็รู้วิธีการที่จะทำได้ใน n^1.58, n log n หรือแม้แต่น้อยกว่านั้นสำหรับ n ที่มีค่ามากๆ ดังนั้นถ้า n มันใหญ่พอ มันจะเห็นความแตกต่างได้ชัดเจนมาก เรื่องเวลาที่ใช้ในการคำนวณ (เสี้ยววินาที เทียบกับเป็นนาที อะไรทำนองนั้น) ตัวอย่างของ algorithm ดังกล่าวก็เช่น Karatsuba algorithm
  • Algorithm เหล่านี้ แม้ว่าจะมีประสิทธิภาพสูงกว่า (และมีความแม่นยำสูงกว่า) วิธีการแบบ school-book มาก .. แต่ว่าเนื่องจากความซับซ้อนของมัน ก็ทำให้พวกมันมี bug ง่ายกว่าเช่นกัน
  • นอกจากนั้นยังมีเรื่องของการเก็บค่าตัวเลขทศนิยมไว้ในหน่วยความจำ ซึ่งปกติจะเก็บเป็นฐาน 2 เพื่อคำนวณ แต่ว่าเมื่อจะนำมาแสดงผล จะต้องเปลี่ยนฐานเลขให้เป็นฐาน 10 ซึ่งโดยปกติจะต้องทำการ round ตัวเลขฐาน 2 พวกนั้นให้เป็นเลขฐาน 10 ที่มีความใกล้เคียงที่สุด จากรูปข้างล่างนี่จะเห็นว่ามีความคลาดเคลื่อนในการแสดงผล


  • ปัญหาหลักๆ จริงๆ มาจากการทำ base conversion ซึ่งจาก binary เป็น decimal จะใช้การคูณเป็นหลัก และจาก decimal เป็น binary จะกลับกันคือใช้การหารเป็นหลัก ประเด็นมันอยู่ที่ว่า บางที (สำหรับตัวเลขบางตัว) การคูณหรือหารนั้นจะต้องทำที่ precision ที่มากกว่าตัวเลขนั้นๆ เพื่อให้ได้ค่าที่ถูกต้อง
  • แต่ว่าระบบคำนวณหลายระบบดันผูกติดกับ fixed precision ของ hardware ที่ใช้งาน ดังนั้นในหลายๆ งานจึงไม่สามารถที่จะได้การแปลงเลขฐานที่ถูกต้องสำหรับตัวเลขหลายๆ ตัว
  • ความผิดพลาดยังเกิดได้จาก “เลขทด” (carries) หรือตัวเลขที่เกิดจากกระบวนการทดเลขน่ะแหละครับ ซึ่งระบบซอฟต์แวร์หลายตัวก็จะทำงานพลาดถ้ามีการทดมากๆ ไป ซึ่ง bug แบบนี้มีมาตั้งแต่สมัยไหนสมัยไรแล้ว โปรแกรมหลายตัวในปัจจุบันก็ยังมีปัญหาเรื่องนี้อยู่นะ
  • ปัญหาหนักอีกที่หนึ่งสำหรับ computer arithmetic ก็คือ ในกรณีทั่วๆ ไป มันค่อนข้างจะ “ง่าย” ที่จะทำให้มัน “เกือบถูกต้อง” (คือ ถูกกับ input case ทั่วๆ ไป แต่ว่ากับ input บางตัวจริงๆ จะทำให้เกิดปัญหาขึ้นมา)
  • และปัญหาที่หนักที่สุดก็คือพวก bug กับตัวเลขบางตัวที่มี bit pattern บางประเภทจริงๆ พวกนี้จะหาเจอยากมากในระหว่าง testing หรือว่าเรียกได้ว่า rare bug เลยก็ว่าได้ มันหายากขนาดที่ว่าเราอาจจะทดสอบกับตัวเลขเป็นพันๆ ล้านตัว แต่ว่าไม่เจอพวกมันเลยก็ได้

ยังเชื่อใจโปรแกรมหลายตัวของท่านอยู่อีกหรือเปล่าเนี่ย?

อ้างอิง: Wolfram Blog: Arithmetic is Hard — To Get Right

ปล. หลังจากคุยกันเสร็จ ผมกับ peter ก็ joke เล่นกันต่อว่า เฮ้ย นี่แหละ เห็นมั้ย OpenOffice.org ไม่ compatible กับ MS-Office อีกอย่างแล้วนะ (ค่าที่คำนวณมันได้ไม่เท่ากัน ใส่ตัวเลขข้างบนเข้าไปแล้ว OO.o มันคำนวณถูก…) แถม peter เล่าให้ฟังว่า บางคนตลกร้ายกว่านั้น บอกให้เพิ่ม tag MultiplyLikeExcel2007 ลงไปใน spec ของ OOXML ด้วยนะ ขำกลิ้งเลย

ปล.2 จริงๆ Slashdot ก็มีลง แต่ว่าพักหลังๆ ผมอ่าน /. น้อยลงมั้ง ก็เลยไม่ค่อยได้สังเกตหรือว่าใส่ใจ อันนี้ link:

นับถอยหลัง Boot Camp Beta

Apple ได้ ออกโรงเตือน ผู้ใช้ Boot Camp ว่าซอฟต์แวร์รุ่นทดลอง (beta) ตัวนี้ได้หมดอายุลงไปเรียบร้อยแล้วเมื่อวานนี้​ (30 กันยายน) สำหรับ Boot Camp รุ่น 1.2 หรือก่อนหน้า โดยที่เมื่อหมดอายุแล้วจะไม่สามารถใช้งาน Boot Camp Assistant ได้อีกต่อไป

To continue using Boot Camp Beta for Microsoft Windows on your Intel-based Mac, you’ll need to update to Boot Camp Beta 1.4, until Mac OS X 10.5 Leopard is available.

อันนี้ confirm เพราะว่าเครื่องผมลงไว้เป็น 1.2 เท่านั้น (แต่ว่าไม่เคยใช้เลย)

สำหรับรุ่นหลังจากนั้น (ถึง 1.4) ทาง Apple ก็ได้บอกว่าจะยังคงทำงานต่อได้อีกสักพักจนกว่า Leopard (ซึ่งจะมี Boot Camp ตัวจริง) จะออกมาในเดือนนี้ ซึ่งเมื่อวันนั้นมาถึง ทาง Apple ก็ได้บอกว่าการที่จะใช้งาน Boot Camp ต่อไปนั้นจะต้อง upgrade เป็น Leopard จาก statement นี้นะ

To continue using Boot Camp at that time, upgrade to Mac OS X 10.5 Leopard.

เอาล่ะสิ ท่าทางจะเป็นเรื่องแฮะคราวนี้ ไม่รู้จะโดนอะไร ไม่รู้จะมาไม้ไหน แต่ว่าตอนนี้ผมไม่เดือดร้อนนะ เพราะว่าก็ไม่ได้ใช้ Windows อยู่แล้วด้วย (แบ่ง partition เผื่อไว้ตั้งนาน ว่าจะลงๆ ก็ไม่ได้ลงซักกะที ลงไปก็คงไม่ได้ทำอะไรมากกว่าเล่นเกม กับทดสอบพวกโปรแกรมบน Windows เพื่อเก็บข้อมูลในการทำงานล่ะมั้ง …)

แต่ว่าอนาคตเป็นเรื่องไม่แน่นอน ยังไงอาจจะมี Boot Camp รุ่นสำหรับ Tiger ตัวเต็มออกมาให้ใช้งานก็ได้นะ (แต่ว่าอ่านจาก statement ของ Apple แล้วไม่อยากจะหวังอะไรมากแฮะ ยิ่งพักหลังๆ นี่ยิ่งเขี้่ยวๆ อยู่ด้วยกับเรื่องพวกนี้)

ทำไมผมรู้สึก negative กับ Apple พักหลังๆ ยังไงก็ไม่รู้แฮะ ส่วนหนึ่งก็เข้าใจอ่ะนะ ว่า policy ส่วนมากมันก็ผูกพันกับการตลาด ธุรกิจ แล้วก็ผลประโยชน์ร่วมกัน (เช่นเรื่อง iPhone เป็นต้น) แต่ว่าเรื่องเล็กน้อยแบบ Boot Camp นี่ ทำไมถึงกับต้องให้ upgrade เป็น Leopard ทั้งๆ ที่ตอนนี้มันก็ยังทำงานได้ไม่ขัดข้องอะไร หรือว่ามันจะต้องไปใช้ feature อะไรที่ Leopard มันมีแต่ Tiger ไม่มี? อันนี้ไม่น่าใช่หนัก แล้วเพราะอะไร? คนอยากจะใช้ Leopard เต็มบ้านเต็มเมืองอยู่แล้ว คิดว่าไม่ต้องพยายาม force คนทุกครั้งที่มีโอกาส และทุก feature หลักที่ทำให้หลายคนยอมใช้ Mac อยู่ก็ได้นะ

แต่ว่าก็มองอีกแง่นึงแฮะ เพราะว่าคนที่แคร์กับ Boot Camp “ส่วนมาก” ย้ำ “ส่วนมาก” จะเป็นพวก switcher ที่อาจจะไม่ค่อยจะสนใจ OS X หรือเปล่านะ ก็เลยต้องหาเรื่อง force แบบนี้ ไม่งั้นอาจจะไม่สนใจ upgrade กัน ทำให้เสียโอกาสและ revenue?

แต่ช่างเถอะ … ยังมีเวลาเหลืออีกหน่อย ไว้ค่อยดูกัน

อ้างอิง: When does Boot Camp Beta expire?, Apple Support Article ID: 306583