RSS
 

Archive for the ‘Computing’ Category

Smallest Turing Machine Found & Proved!

26 Oct

Alex Smith นักศึกษาปริญญาตรีจากมหาวิทยาลัย Birmingham ได้พิสูจน์ว่า Turing Machine ที่มี 2 states และ 3 colors (symbols) เป็น Universal Turing Machine (UTM) ซึ่งเป็น UTM ที่เล็กที่สุดที่จะเป็นไปได้

การพิสูจน์นี้ทำให้ Alex ได้เงินรางวัล $25,000 จาก Wolfram Research Prize และเป็นการสิ้นสุดการหา UTM ที่เล็กที่สุดที่จะเป็นไปได้ (มีการค้นหากันมาครึ่งศตวรรษแล้ว) และมันเป็น fact ที่รู้กันว่า ไม่มี Turing Machine ที่มี 2 states, 2 symbols จะเป็น Universal ได้

ซึ่งการพิสูจน์นี้เป็น insight ที่อาจจะส่งผลให้มีการเปลี่ยนแปลงบางอย่างในโลกของ computing เช่นอาจจะนำไปสู่การสร้าง computing machine ที่ระดับโมเลกุล เป็นต้น ซึ่ง comment นี้สามารถอ่านได้จาก blog ของ Stephen Wolfram เอง

นอกเรื่องนะ…..

ผมรู้สึกเฉยๆ และค่อนไปทางไม่ค่อยจะชอบ Stephen Wolfram เท่าไหร่ เพราะว่าอะไรหลายๆ อย่าง ตอนแรกก็ admire นะ แต่ว่าพอหนังสือ A New Kind of Science (หนังสือ online full version จากเจ้าของเอง) ออกมานี่ค่อนข้างจะ negative เพราะว่า claim ผลงานชาวบ้านเป็นของตัวเองเยอะเหลือเกิน โดยเฉพาะการพิสูจน์ว่า Cellular Automata กฏ 110 ซึ่งเทียบเท่ากับ Turing Machine มี 2 states, 5 symbols ว่าเป็น UTM ที่ Wolfram claim ว่าเป็นของตัวเอง ทั้งที่จริงๆ คนที่พิสูจน์ได้จริงๆ คือ Matthew Cook ซึ่งทำงานเป็นผู้ช่วยวิจัยให้กับ Wolfram

เรื่อง Cook กับ Wolfram และการพิสูจน์กฏ 110 นี่ควรหาอ่านได้ยาวๆ จากหลายๆ ที่บน internet แต่ว่าเพราะ Wolfram ไล่ฟ้องชาวบ้านเค้าทั่วไปหมดที่พูดเรื่องนี้ทำให้อาจจะหาไม่ค่อยจะได้

อ่อ ลืมไป ใครคิดจะอ่าน A New Kind of Science นี่ พยายามลองหา review ของนักวิทยาศาสตร์ที่เป็น critiques มาลองอ่านดูก่อนก็ดีนะครับ เพราะว่ามันมีอะไรหลายๆ อย่างที่ อืมมมมม ไม่ค่อยจะดีเท่าไหร่ แต่ว่าคนที่ไม่รู้ deep technical หรือว่า deep theoretical understanding มาก่อนเลย อาจจะได้รับความรู้อะไรหลายอย่างผิดๆ ไปเยอะพอควร เช่น

  • review ของ Lawrence Gray อันนี้เจ๋งมาก
  • หรือของ Cosma Shalizi
  • หรือว่า ใน slashdot แต่ว่าเลือกเชื่อ comment/review ใน slashdot เอาเองนะ …

จริงๆ มีเยอะกว่านี้เยอะ แต่ว่าไม่ได้เก็บ link ไว้เลย ตอนนี้ขี้เกียจหา แต่คิดว่าหาไม่ยาก

อีกอย่าง หนังสือเล่มนั้น dismissed prior knowledge แทบจะทั้งหมดเลย ทั้งๆ ที่อะไรหลายๆ อย่างมีคนค้นพบมาก่อนแล้ว และเป็น known facts เสียด้วยซ้ำ โดยเฉพาะเรื่องที่ระบบที่มีกฏพื้นฐานที่เรียบง่าย สามารถมีพฤติกรรมที่ซับซ้อนยากยิ่งต่อความเข้าใจ และเรื่องอื่นๆ ฯลฯ อ่อ ใช่ หนังสือเล่มนั้น (edition ที่ผมมี) ไม่มี reference เลยนะครับ และ Wolfram พูดถึงทุกอย่างใน passive tone มาก

A New Kind of Science (NKS) ก็เป็น interesting read ครับ แต่ว่าอย่าไปเชื่อมันมากนัก เพราะว่าหลายๆ อย่างในนั้นก็ไม่ได้ significant ขนาดที่คนเขียนหนังสือพยายามจะให้มันเป็น

แต่ว่าการที่พิสูจน์ได้ว่า TM ขนาด 2 states, 3 symbols เป็น UTM นี่ significant ครับ โดยไม่เกี่ยวกับ Stephen Wolfram :-P และครั้งนี้ผมเห็นด้วยและยินดีที่ Wolfram ให้ credit ที่ถูกต้องกับคนที่ค้นพบความจริงข้อนี้ครับ

อ่าน PDF ของการพิสูจน์ ของ Alex Smith ครับ

[update 1]: เพิ่ม list ของ review หนังสือ A New Kind of Science

 
 

ภาษาโปรเกรียน

25 Oct

โอ๊ย อ่านแล้วขำสุดๆ กลิ้งไปกลิ้งมา

สุดยอดมาก ยกนิ้วโป้งให้สองนิ้วเลย

สรุปให้นิด ว่าทำเหมือนกับว่าภาษาโปรแกรมแต่ละภาษาเป็นคน แล้วเอาข้อดีจริงๆ หรือว่า hype หรือว่า buzz ของตัวเองมาข่มกันไปมา แถมมีการแขวะกันแบบตลกร้ายมากๆ ด้วย ชอบตรงนี้น่ะ

Ruby: Dude! I just wrote a full working clone of Google while you were giving your riveting little speech there! (โอ๊ย ระหว่างที่พวกเอ็งโม้กันอยู่เนี่ย ข้าเขียน Google clone เสร็จแล้วนะเฟ้ย)

Moderator: Oh, bravo, Ruby! I’d like to see that. Where is it deployed? (เจ๋งมากรูบี้! ขอดูได้มั้ย เอาไปติดตั้งไว้ที่ไหนเหรอ?)

Ruby: Umm…. (เอ่อ…..)

จริงๆ ขำทั้งเรื่องน่ะแหละ สุดๆ

 

สับสน … ชื่อภาษาโปรแกรม?

22 Oct

ช่วงนี้ตรวจข้อสอบเด็กเยอะแยะ ตาลาย ไม่พอ ยังไม่วายเข้าไปดูตาม webboard หลายที่ …​ ก็เจอเรื่องที่คาใจมาน้านนาน คือ มักที่จะเจอคนเรียก IDE หรือ Editor ปนกับชื่อภาษาโปรแกรม โดยเฉพพาะเมื่อตัว IDE นั้นๆ มันดันมีชื่อภาษาปนอยู่ด้วย เช่น

  • ภาษา Turbo C
  • ภาษา Dev-C++
  • ภาษา Visual C++
  • ภาษา RadRails
  • ยังมีอีก ฯลฯ

ซึ่งอ่านไปอ่านมาก็ตลกดี คิดในบางแง่มันก็อาจจะ make sense เนื่องจาก

  • ภาษาหลายภาษา (เช่น C, C++) เป็นเพียงแค่ข้อตกลง ข้อกำหนด เท่านั้น บางอย่างก็จะเป็น vendor-specific โดยเฉพาะในจุดที่ไม่นิยามในตัวข้อกำหนดมาตรฐานจริงๆ (undefined by standard) ซึ่งจะทำให้ภาษาเหล่านี้แตกต่างกันไปตาม vendor
  • Vendor หลายเจ้า โดยเฉพาะ Microsoft มักจะมีปัญหาประจำแหละ เรื่องนี้ คือไม่ได้ implement C++ ของตัวเองตามมาตรฐานของ C++ เสียทีเดียว อะไรหลายๆ อย่างที่มันถูกต้องตาม standard C++ ก็ไม่ถูกใน C++ ของ Microsoft
  • บางทีมันก็เป็นเรื่องของ library ด้วย คือ vendor หลายเจ้ามักจะ implement อะไรหลายๆ อย่างเพิ่มเข้าไปจากที่จำเป็นต้องมีอยู่แล้วใน standard library (ถ้าเป็น C ล่ะก็ ตัวยอดนิยมคงจะไม่พ้น itoa() ใน stdlib.h กระมัง)

แต่ว่ายังไงๆ ก็ตาม เราก็น่าจะเรียกตามชื่อ vendor ของมันมากกว่าจะเรียกตามชื่อ IDE ไม่ชื่อหรือ ไอ้พวก “ภาษา ​Turbo C” นี่คงไม่เท่าไหร่ เพราะว่า implementation ของ C ตามแบบนั้น คงจะไม่มีคนทำ IDE ขี้นมาใช้นอกจาก Turbo C เอง (แต่ว่าก็ไม่แน่ เพราะว่าจริงๆ ก็สามารถทำ modern IDE ขึ้นมาเรียกการทำงานของส่วน compiler ใน Turbo C ก็ได้)จริงๆ แล้ว Borland ก็มี compiler สำหรับ Windows นะ ให้ใช้งานได้ฟรีๆ นะ แต่ว่าเป็น command line ซึ่งจำเป็นต้องหา IDE มาครอบใช้งานเอง (เช่น JFE หรือ CPad ผมเคยใช้แต่ตัวหลัง ตัวแรกลองแล้วไม่ค่อยชอบ) โดยสำหรับตัว compiler ตัวนี้ผมเข้าใจว่าตัวนี้เป็น compiler ตัวเดียวกับที่ใช้ใน C++ Builder แต่ว่าไม่แน่ใจ เพราะว่าไม่มี C++ Builder แต่ว่านั่นแหละ ถ้าเป็นตัวเดียวกันจริง ก็จะมีคนเรียกมันว่า “ภาษา C++ Builder” แทนที่จะเป็น “ภาษา C++ ของ Borland” (Borland’s implementation of C++)เช่นเดียวกับการเรียก “ภาษา Visual C++” แทนการเรียก “ภาษา C++ ของ Microsoft” (Microsoft’s implementation of C++)แต่ว่าเจ้า “ภาษา Dev-C++” นี่สิ เรื่องใหญ่ ทั้งๆ ที่เรียกใช้งาน GNU GCC ซึ่งเป็น GNU’s implementation of C/C++ นะ … Misleading มากเลย

 

วิวัฒนาการของ Dock

11 Oct

อ้างอิง: Road to Mac OS X Leopard: Dock 1.6 โดย Prince McLean

Dock ถือว่าเป็นส่วนหนึ่งของ Interface หลักใน Mac OS X (และ Desktop อีกหลายตัว) ซึ่งตัว Dock นี้วัตถุประสงค์หลักของมันก็คือไว้เก็บ Application ที่ใช้บ่อยๆ (ย้ำ บ่อยๆ) หรือว่าใช้เป็นงานหลัก เพื่อให้เข้าถึงง่ายและเรียกใช้ได้เร็ว แต่ว่าหลายๆ คนกลับเอาโน่นเอานี่ใส่ไว้เยอะแยะมากมายมหาศาล (โดยเฉพาะโปรแกรมในชุด iLife หลายตัวที่อาจจะแทบไม่ได้ใช้ หรือว่าใช้นานๆ ครั้ง) ทำให้ Dock มันรก และไม่สะดวกในการใช้งาน



[ภาพ Dock ใน OS X 10.5 จาก AppleInsider]

จริงๆ แล้วในปัจจุบันก็ค่อนข้างที่จะ controversial มากพอควร ว่าจริงๆ แล้วการใช้งาน Dock ในลักษณะแบบนั้นนี่จะเหมาะสมดีจริงๆ หรือเปล่า เพราะว่าจริงๆ แล้วมันทำให้มีการเลื่อน mouse เยอะพอดู (แต่ว่าก็ยังน้อยกว่าการค้นจาก Application folder หรือ Start Menu) และถ้าเราเป็นคนมักมากก็คงจะเอาโปรแกรมโน้นนี้ไปใส่ไว้ใน Dock เกือบหมด ซึ่งทำให้การใช้งาน Dock มีความสะดวกน้อยลง (เพราะว่า icon เล็กลง การหาเสียเวลามากขึ้น) … ยิ่งถ้าเป็น QuickLaunch ของ Windows ด้วยยิ่งไปกันใหญ่ เพราะว่ามันไปแย่งที่อยู่กันเองกับ Taskbar



[ภาพจาก QuickLaunch & Taskbar จาก AppleInsider]

Controversial ที่ผมว่านี้ ส่วนหนึ่งก็คือ Dock ไม่ได้เหมาะสมเท่าไหร่ในฐานะของ Application Launcher หรือเปล่า เพราะว่าเวลาเราจำโปรแกรม ส่วนหนึ่งเราจะจำเป็นชื่อ และหลายครั้งที่เราใช้งานคอมพิวเตอร์ มือของเราจะอยู่ที่ keyboard ไม่ใช่ mouse ทำให้มีคนพัฒนาโปรแกรมในลักษณะ Application Launcher ที่เรียก shortcut (มักจะเป็นการกดปุ่มบน keyboard สองปุ่มหรือว่าสามปุ่มพร้อมกัน) แล้วพิมพ์ชื่อโปรแกรมลงไปมากกว่า เช่น QuickSilver บน Mac OS X เป็นต้น

บทความที่ผม link มาด้านบน​ มีเรื่องวิวัฒนาการของ Dock ตั้งแต่เริ่มต้นใน RISCOS เป็น NeXT เป็น Newton เป็น … และมาลงเอยด้วย Mac OS X และครอบคลุมถึง feature ใหม่ๆ ใน Mac OS X 10.5 Leopard ด้วย (เช่น Stacks) เป็นบทความที่ยาว 3 หน้า แต่ว่าเป็นเรื่องวิวัฒนาการของ Dock หน้าเดียว นอกนั้นเป็น Dock ใน Leopard

Stacks สำหรับ Dock ใน OS X 10.5 นี่เท่าที่อ่าน (ยังไม่ได้สัมผัส) ก็น่าจะเข้าท่าทีเดียว แต่ว่าจะทำให้การใช้งานง่ายขึ้น หรือว่าเพิ่มความซับซ้อนในการใช้งาน (และ visual effect) โดยใช่เหตุ ก็ยังเป็นประเด็นที่จะต้องขอดูต่อไปก่อน

เสียดาย ที่บทความที่ว่า ไม่ได้พูดถึง Dock ใน Desktop Environment อื่นๆ เลย แต่ว่าก็ไม่เป็นไร เพราะว่าเค้าอยากจะเขียน focus ไปที่ Dock ของ OS X รุ่นใหม่ ก็เลยไม่ได้ focus ไปที่ตัวอื่น

เอาไว้ถ้ายังไงผมจะลองเขียนๆ ให้อ่านเองก็แล้วกันครับ (สัญญาอีกล่ะ) เหมือนกับที่เคยเขียนเรื่อง History of Modern Mac Operating Systems: Mac OS 8, 9 and X ไว้เมื่อนานมาแล้ว (จริงอยากจะขยายเป็นหนังสือ เรื่องประวัติ Modern OS ซักเล่ม แต่ว่าท่าทางจะยาว…… ข้อมูลมันเยอะมาก ยิ่งพวกสาย Linux, BSD เนี่ย เยอะสุดๆ)

 

9/07 Solaris Express Developer Edition

10 Oct

เปล่า ไม่ได้ 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 ให้ฟังนะครับ

 

How to Become A Hacker

04 Oct

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

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

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

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

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

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

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

 

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

03 Oct

เมื่อวานนี้ 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 ในคอมพ์จึงยาก?

03 Oct

วันก่อน 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:

 

Computer Stupidities

01 Oct

มี website อยู่ที่หนึ่งนะ ที่ผมเคยชอบเข้าไปดูเมื่อก่อน (ตอนนี้ก็ once in a while) เข้าไปหาเรื่องสนุกๆ อ่านเล่น

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

  • Piecing it together (เอาเรื่องโน้นเรื่องนี้มาจับแพะชนแกะกันมั่ว)
  • Operating System (ความเข้าใจผิด เรื่องขำขัน เกี่ยวกับ OS)
  • Programming (ใครเรียน CS/IT/CE ต้องอ่าน!)
  • Mincing Words (เอาคำมายำกัน)
  • Paranoia (ความกลัวจากความเชื่อผิดๆ จนเข้าขั้นวิตกจริต)
  • Stupid Tech Support (อันนี้ขำมาก)
  • Stupid Salesman (อันนี้ด้วย)
  • ……. เยอะแยะ เข้าไปอ่านเองนะครับ

เมื่อก่อนอ่านก็ขำนะ แต่ว่าทำไมเดี๋ยวนี้มันต้องหัวเราะแห้งๆ ก็ไม่รู้ ขำไม่ออกมากขึ้นหลายๆ อย่าง แต่ว่าก็ยังเข้าไปอ่านอยู่ดี มีความรู้สึกว่าดีกว่าอ่านกระทู้ที่ web หลายๆ web หน่อยนึงมั้ง

อืมมม แต่ว่าจริงๆ คงต้องมองย้อนกลับไปที่ต้นตอของปัญหามากขึ้น ด้วยความรู้สึกส่วนตัวอย่างหนึ่งที่มีมานานแล้วนะ คือ computer แล้วก็ information technology มันกลายเป็น mainstream เร็วเกินไป เร็วเกินกว่าที่คนจะมี literacy กับมันมากพอ คือทุกวันนี้ computer กลายเป็นอุปกรณ์มาตรฐานอย่างหนึ่งในการใช้ชีวิต การทำงาน การเรียน การติดต่อ ฯลฯ แต่ว่ามันต่างจาก TV, วิทยุ, โทรศัพท์, projector, ฯลฯ มากมายมหาศาล เรียกว่ามันคนละ order of magnitude เลยก็ว่าได้

พูดง่ายๆ ว่าเราสามารถใช้ TV ได้โดยไม่ต้องคิดว่ามันจะตีกับวิทยุหรือเปล่า แต่ว่าถ้าเราเปิดโปรแกรมดูหนังพร้อมกันกับโปรแกรมฟังเพลง มันอาจจะตีกันทำให้ crash กันได้ไม่ยากเย็นเลย หรือว่าเราสามารถที่จะใช้เครื่องคิดเลข กับเครื่อง word processor ได้โดยไม่ต้องคิดว่าพวกมันแย่งทรัพยากรกันยังไง (นอกจากค่าไฟค่าแบตเตอรี่จากกระเป๋าเรา) หรือว่าเรื่องไวรัสที่ติดกับโปรแกรมตัวนึงอาจจะทำลายไฟล์ได้ทั้งเครื่อง ฯลฯ

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

ช่วยกันได้ก็ช่วยๆ กันไปนะครับ เรื่อง computer/information literacy กับคนใกล้ตัวเนี่ย สำคัญเชียวแหละ อ่าน web นั้น อ่านกระทู้ทั่วไปตาม webboard หรือว่าเจอคนใกล้ๆ ตัว ก็ช่วยกันสร้างความเข้าใจที่ดีขึ้นกับ computer เถอะครับ มันใกล้ตัวกว่าที่เราคิด

 

Pointless Programming : Java 7

27 Sep

จริงๆ เค้าเรียกว่า Point-Free Programming (HaskellWiki) หรือว่า Tacit Programming (Wikipedia) นะ :-P ผมเขียนชื่อล้อเลียนไปงั้นเอง เรื่องนิยามหรือว่าตัวอย่างลองไปดูใน Wiki link ด้านบนเอานะครับ แต่ว่าผลของมันเนี่ย มันมักจะทำให้โปรแกรมสั้นขึ้น ในขณะที่มันก็ยังอ่านง่ายขึ้นด้วยเออสิ แล้วมันเกี่ยวอะไรกับ Java 7 ล่ะเนี่ย? เพราะว่าใน spec ของ Java 7 มันจะมีเรื่อง Closures เข้ามาเกี่ยวข้องด้วย แล้วก็จะมีเรื่องอื่นๆ ที่เอา idea จาก Functional programming มายัดลงไปในภาษาที่มันค่อนข้างจะ bloat และ verbose ที่สุดภาษานึง ทำให้มันสั้นลง กระชับขึ้น น่าอ่านน่าเขียนขึ้นแบบไม่น่าเชื่อ ลองดูตาม Link ต่อไปนี้นะครับ

ส่วนนิยามของ Closures ในแบบ Computer Science และ Software Development จริงๆ ก็ตามนี้ครับ Closure (computer science) – Wikipediaขอปิดท้าย post นี้ด้วยเรื่องของ Point-Free Programming ใน Java 7 ครับ สวยดีเหมือนกัน ดูรายละเอียดเต็มๆ ที่นี่: Ricky’s technical blog: Point-free Programming in Java 7 – Beyond Closuresผมว่าโลกมันกำลังหมุนไปในทิศทางที่มันถูกต้องนะ ที่ในที่สุดก็เริ่มจะมีการเอา idea ของ Functional programming มาใช้ในภาษาโปรแกรมที่เป็น mainstream เสียที เพราะว่า programming model ของ Functional มัน elegance กว่า imperative เยอะมาก …สุดท้ายมันทำให้ผมนึกถึง paper ที่เป็น hall-mark สุดยอดอันนึงของ John Backus (ผมเคยเขียนถึงเรื่องเค้าทีนึงที่ Thai Mac Dev นะ) คือCan programming be liberated from the von Neumann style?: a functional style and its algebra of programs (Link ไปหา paper ที่ Stanford University)เมื่อ Java 7 ออกมาจริงๆ ผมคงจะต้องกลับมามองมันแบบ serious อีกที แต่ว่าเราก็ไม่รู้เหมือนกัน ว่าวันนั้นโลกมันจะหมุนไปถึงไหน และจะมี feature อะไรอีกบ้าง ใน niche programming languages ที่ทำให้ผมอ้าปากค้าง ตกหลุมรัก และมอง Java 7 “ในวันนั้น” ว่ามันไม่ elegance ….. อย่างว่าแหละครับ Programmers Don’t Like to Code ;-)