Pointless Programming : Java 7

จริงๆ เค้าเรียกว่า 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 ;-)

เปลี่ยนภาษาเขียนโปรแกรม

อะไรยากกว่ากัน ระหว่าง

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา
  2. สอนคนที่เขียนโปรแกรมไม่เป็น ให้เขียนโปรแกรมเป็น

หลายคนจะตอบข้อ 2 โดยไม่ลังเลเท่าไหร่ เพราะว่าถ้าเป็นภาษาหนึ่งๆ แล้ว เรียนอีกภาษาหนึ่งคงไม่ยากเท่าไหร่ สาเหตุหนึ่งก็คงเพราะว่าภาษาส่วนมากมีรากที่คล้ายๆ กัน เช่น Pascal, C, C++, Java, C# ถ้าเป็นภาษาใดภาษาหนึ่งแล้ว การเรียนรู้ syntax ของอีกภาษาหนึ่งก็ไม่ใช่เรื่องยากเย็นเท่าไหร่แต่ว่าสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมเป็นนี่สิ งานช้าง เพราะว่าอาจจะต้องสอนแนวคิด หลักการคิดแบบคอมพิวเตอร์ หลักการคิดแบบ von Neumann machine หลักการคิดแบบที่เราต้องใช้เวลาเขียนโปรแกรม ฯลฯ ซึ่งอาจจะยากหน่อย ไหนเลยจะต้องมานั่งเรียนรู้ syntax อีกแต่ว่าถ้าเปลี่ยนคำถามหน่อยนึงล่ะ เปลี่ยนข้อที่ 1 ให้เป็น

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยน paradigm ในการเขียนโปรแกรม

ไอ้นี่อาจจะเป็นงานช้างพอๆ กัน หรือว่าช้างกว่าการสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมก็ได้ เพราะว่าคนเราพอมันชินกับวิธีคิดแบบไหนแล้ว การจะเปลี่ยนรูปแบบของวิธีคิด การที่จะออกจาก The Matrix ของกระบวนการคิดของตัวเอง หรือว่าลักษณะการคิดของตัวเองได้ นี่คงจะยากเย็นแสนเข็ญมิใช่น้อย จะยกตัวอย่างดังนี้

  • นึกถึงโปรแกรมที่ประกาศตัวแปรไม่ต้องประกาศ type แต่ว่าก็ยังเป็น strong typing ออกไหม
  • นึกถึงโปรแกรมที่ไม่ต้องประกาศ main function ออกไหม
  • นึกถึงภาษาโปรแกรมที่ไม่มี loop ออกไหม
  • นึกถึงภาษาโปรแกรมที่ฉลาดพอที่จะทำ list comprehension (เช่นบอกว่า จะเอา x จาก list L โดยที่ x มากกว่า 3 แล้วมันเข้าใจว่าจะต้องทำอะไรโดยที่เราไม่ต้องเขียน low-level instruction)

นอกจากเรื่องพวกนี้จะยาก เพราะว่าพอสมองเราถูก over-train ให้ชินกับอะไรบางอย่างมากๆ แล้ว มันจะเรียนรู้สิ่งใหม่ยากขึ้น มีอะไรที่ต้อง unlearn มากขึ้น อย่าว่าแต่ imperative vs. functional programming เลย แค่ procedural vs. object-oriented ก็แย่แล้ว การที่เราจะ unlearn เรื่องหนึ่งๆ แล้วปรับไปสู่เรื่องใหม่ เป็นเรื่องที่ค่อนข้างยากเอาการทีเดียวไม่ใช่แค่นั้น แต่ให้เขียน style เดิม แต่ว่าเปลี่ยนภาษาเขียนโปรแกรม ก็ยากแล้ว

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา โดยต้องใช้เป็นภาษาหลักในกรณีทั่วไปแทนภาษาเดิม

ผมเห็นน้องหลายคนเขียน Ruby กันมาพักนึง (เพราะว่างานบางงานที่อาจจะต้องใช้ Rails) แต่ว่าพอลองตั้งโจทย์ที่มองไม่เห็นชัดว่าจะใช้ความสามารถของภาษาตรงไหน (ให้สร้าง permutation ของ list) น้องหลายคนก็ fall-back กลับไปเขียน C เหมือนเดิมไม่แปลกอะไร เพราะว่าจริงๆ แล้วผมเอง บางทีขนาดโปรแกรมง่ายๆ ก็ยังดื้อจะเขียน C++ กับ STL อยู่เลย ทั้งๆ ที่รู้อยู่แก่ใจว่า Ruby, Python, Haskell มันก็ทำได้ และจะง่ายกว่าด้วย แต่ว่าทำไมนะ ทำไมผมถึงยังจะดื้อที่จะ fall-back ไปเขียน C++ อยู่ดี?ความเคยชินบางอย่างมันแก้กันยาก อาจจะเป็นเพราะว่าผมใช้เวลาอยู่กับ C++ มานานกว่าภาษาอื่นๆ และทำงานจริงในภาษาตระกูล C มานานกว่าภาษาอื่นๆ หลายเท่าตัวก็ได้ (C, C++, Objective-C)เปล่าหรอกครับ ผมไม่ได้ถามเพื่อหาคำตอบใดๆ เพราะว่านี่คือธรรมชาติของมนุษย์ อะไรก็ตามที่เราทำจนเป็นนิสัย จนเป็น second nature แล้วมันอาจจะเปลี่ยนแปลงยากมาก หลายเรื่องเราเปลียนไม่ได้ เพราะว่าเรามีความรู้สึกว่า “เคยทำ” อะไรที่มันคล้ายๆ กันมาก่อนในลักษณะนั้นอยู่แล้ว (เช่นเวลาผมจะเขียนโปรแกรมง่ายๆ บางทีผมใช้ C++ โดยไม่มีเหตุผล ทั้งๆ ที่เขียน Ruby ง่ายกว่าเยอะ ส่วนหนึ่งเพราะว่าผม “เคยทำ” สิ่งนั้นมาแล้วใน C++ มั้ง)ผมเลยมีข้อสังเกตและข้อเสนอแนะให้น้องๆ ที่อยากจะเขียนโปรแกรมภาษาใหม่นะครับ ดังนี้

  1. เขียน code ภาษานั้นให้เยอะที่สุดและเร็วที่สุด โดยอย่าเอาแต่ลอก code จากหนังสือหรือว่า tutorial เพราะว่าคุณจะไม่ได้ใช้งานจริง และไม่ได้ force ให้ตัวเองคิดในลักษณะของภาษาใหม่ๆ เท่าไหร่
  2. เรียน standard library ของภาษานั้นๆ ให้มากที่สุดในเวลาที่น้อยที่สุด เพื่อให้รู้ว่ามันพอจะทำอะไรให้เราได้บ้าง โดยไม่ต้องลงอะไรเพิ่มเติม แล้วก็ลองดูว่ามันเอามาทำอะไรให้ชีวิตเราง่ายขึ้นได้บ้าง
  3. หักดิบ อย่าเล่นภาษาเดิมเท่าที่จะทำได้ ถ้าจำเป็นจริงๆ ก็ลองลบ compiler ภาษาเดิมทิ้งไปเลย
  4. อย่าเอาแต่เรียน syntax กับ library นะ เพราะว่าสิ่งที่สำคัญที่สุดสิ่งหนึ่งที่แทบทุกคนลืม ก็คือ การเรียน idiom ของภาษานั้นๆ ยิ่งหลายภาษา โดยเฉพาะพวกภาษาใหม่ๆ เป็นพวก expressionism ซะด้วยสิ แบบนี้ idiom ยิ่งสำคัญมากเข้าไปอีก
  5. ยิ่งถ้าเป็นการเรียนภาษาคนละ paradigm กับที่เคยเขียนนะ ยิ่งไปกันใหญ่ เพราะว่าลักษณะการเขียน วิธีคิด idioms ต่างๆ มันจะต่างกันมาก มากๆ ถึงมากที่สุด
  6. ยากนะ แต่ว่าหลายครั้งต้องคิดนอกกรอบเดิม ถ้าคิดตามกรอบเดิมล่ะก็ คุณก็จะไม่ได้เขียนภาษาใหม่หรอก แต่ว่าจะเขียนภาษาเดิมน่ะแหละ แต่ว่าอยู่ใน syntax ใหม่เท่านั้นเอง
  7. ทำงานจริง เพราะว่าทำงานจริงเท่านั้นที่จะบังคับให้เราต้องอยู่กับภาษาโปรแกรมภาษาใหม่และกระบวนการคิดของมัน ยิ่งทำงานจริงแบบมี deadline ด้วยแล้วล่ะก็ ยิ่งดี เพราะว่าเป็นการบังคับให้เรายิ่งต้องคิดและ figure out การทำงานต่างๆ และ idioms ของมันให้ได้เยอะที่สุด เพื่อประโยชน์สูงสุด และให้งานเสร็จเร็วที่สุด
  8. หา library เพื่อช่วยงานโน้นงานนี้เยอะๆ มีของเล่นเยอะๆ แล้วลองเล่นกับมัน เดี๋ยวก็ชินกับมันไปเองแหละ
  9. ดูภาษาอื่นๆ ใน paradigm เดียวกันบ้าง เพื่อหาข้อเปรียบเทียบหน่อยๆ ก็ดี
  10. ระลึกไว้ ว่าไม่ใช่ทุกภาษาเหมือนกัน สิ่งที่ผิดหลักการในภาษาหนึ่ง อาจจะเป็นสิ่งที่ถูกหลักการและควรทำในอีกภาษาหนึ่งก็เป็นได้ ดังนั้นอย่ายึดติดกับหลักการและข้อบังคับข้อกำหนดต่างๆ ของภาษาหนึ่งๆ มากไปนัก
  11. พยายามมองหาโอกาสใช้มันให้เยอะที่สุดเท่าที่จะทำได้ และอย่าเลี่ยงโอกาสในการใช้มันซะล่ะ

จริงๆ เรื่องนี้ยังเขียนได้อีกยาวมาก แต่ว่าวันนี้พอแค่นี้ก่อน ชักเหนื่อย แต่ขอปิดท้ายด้วย quote ดังจากคนดัง

Anyone could learn Lisp in one day, except that if they already knew Fortran, it would take three days.Marvin Minsky

Blog คือ?

พอดีมีคนถามผม ว่า blog คืออะไร แต่ว่ารู้สึกว่าตัวเองจะอธิบายตอนพูดไม่ค่อยรู้เรื่องเท่าไหร่ เอาเป็นว่าเขียนให้อ่านอาจจะดีกว่า

คำว่า blog มันมีที่มาจากคำว่า web log หรือว่า log บน web ทีนี้ไอ้คำว่า log เนี่ย มันเหมือนกับพวก data logger คือบันทึกข้อมูล บันทึกข้อความ อะไรก็แล้วแต่ที่เราอยากจะบันทึก คล้ายๆ diary น่ะแหละ แต่ว่าแทนที่จะเขียนมันลงกระดาษ หรือว่าลงโปรแกรม word แล้วเก็บเป็นไฟล์ไว้ ก็เขียนมันลง web ซะ

ทีนี้เนื่องจากว่ามันเป็น personal log เนี่ย เราก็เลยเขียนอะไรก็ได้ที่มัน matter กับเรา อาจจะเป็นเรื่องราวในชีวิตประจำวันที่เราอยากจะให้เพื่อนอ่าน หรือว่าแชร์สารทุกข์สุกดิบ หรือว่าเป็นที่เขียนบทความสั้น เขียนความคิดความอ่าน ประสบการณ์ต่างๆ

ซึ่งไปๆ มาๆ มันก็เริ่มดึงดูดคนที่สนใจ ที่มีประสบการณ์เหมือนกัน มีความคิดคล้ายกัน สนใจเรื่องเดียวกัน ให้เข้ามาอ่านได้ ให้เข้ามาทำความรู้จักกันได้ เริ่มเชื่อมโยงกันไปเชื่อมโยงกันมา ก็เริ่มกลายไปเป็น social networking (เครืิอข่ายของสังคม) แบบง่ายๆ

เรื่องน่าสนุกอยู่ตรงนี้ ถ้าเราเอาคำว่า web log มาเขียนติดกัน จะได้คำว่า weblog แล้วตัดคำเสียใหม่ จะได้คำว่า we blog ซึ่ง we ในที่นี้แปลว่า “พวกเรา” และ blog ก็เหมือนจะกลายเป็นคำกริยา (เหมือนกับ we write, we walk, we talk, we do) โดยที่คำนี้จะมีความหมายสื่อถึงการกระทำที่ผมเพิ่งจะเขียนถึงไปเมื่อย่อหน้าสองย่อหน้าก่อนเนี่ยแหละ

ดังนั้น เวลาคนถามกันว่า “มี blog หรือเปล่า” ก็จะหมายถึงว่า เรามีพื้นที่สำหรับเขียนความคิด เขียนประสบการณ์ แบ่งปันความรู้ ความเข้าใจ ทั้งถูกและผิด อะไรก็ตามที่บ่งบอกถึงความเป็นตัวเราเอง อยู่ในโลก cyberspace หรือเปล่า และนอกจากนี้ เราเป็นส่วนหนึ่งของ social network ขนาดใหญ่ ที่ไม่มีขอบเขตพรมแดน ไม่มีแบ่งแยกประเทศ ไม่มีหมวก ไม่มีหน้ากาก หรือเปล่า

และเวลาที่เราบอกใครว่า “ผมมี blog” ก็จะหมายถึงว่า เรามีสิ่งเหล่านั้น นั่นเอง

ปล.จริงๆ เรื่องของ blog มีมากกว่านี้เยอะ ลองดู http://en.wikipedia.org/wiki/Blog นะครับ ส่วนเรื่องที่ตัดคำใหม่ ให้ได้คำว่า we blog น่ะ อันนี้ถึงผมจะคิดเอง มั่วเอาเอง แต่ว่าอาจจะมีอีกหลายคนคิดเหมือนกัน และชอบเหมือนกันก็ได้ .. โดยส่วนตัวผมคิดว่ามันเป็น definition ของพฤติกรรมสังคมในยุค social networking content ที่ดีนะ…

Adium กับ network ใน ม. ศิลปากร

เวลาเล่น MSN เนี่ย ผมไม่ได้ใช้ MSN Messenger for Mac หรอกนะ แต่ว่าผมใช้ Adium ที่เป็น multi-protocol messenger ที่ Open source ด้วย หน้าตาสะสวย feature ดี (แต่ว่าผมก็ใช้แค่ MSN ล่ะนะ ไม่ได้ใช้ protocol อื่นเลย)

แต่ว่าเร็วๆ นี้มันมีปัญหาอะไรก็ไม่รู้ มัน online จาก netไม่work ในมหาวิทยาลัยไม่ได้เลยแฮะ … แต่ว่า MSN Messenger ดันใช้ได้ซะงั้น (แต่ว่า 6.0.2 มีปัญหากับ Safari 3 นะ ถ้าใช้ Safari 3 ก็ upgrade เป็น 6.0.3 ซะ) ไม่รู้สาเหตุว่าทำไม ไป online จากที่อื่นได้หมดเลยนะ นอกจากใน ม. เอง จะบอกว่าเค้า block MSN ก็ไม่น่าใช่ เพราะว่าถ้างั้น MSN ก็ต้องใช้ไม่ได้ด้วยสิ

ก็เลยถึงบางอ้อเอาก็วันนี้แหละ … ว่าต้องใส่ DNS ใน Network setting ใน System preferences ด้วย (พบโดยบังเอิญว่าเราไม่ได้ set มัน เอาออกแต่เมื่อไหร่หว่า เมื่อก่อนใส่ตลอด)

สำหรับคนที่ใช้ Mac ใน ม. ศิลปากร (โดยเฉพาะที่ทับแก้ว) แล้วต้องการใช้ Adium แต่ว่า online ไม่ได้ ลองตั้งค่า DNS ดูนะครับ เอาเป็น 202.28.72.66 ก็ได้ครับ อันนี้ DNS ของภาควิชาคอมพิวเตอร์ครับ (แต่ว่า MSN Messenger มันใช้ได้โดยไม่ต้อง set DNS นะ)

[update 1]: ผู้ช่วยสองคน kiterminal confirmed ว่าใช้งานได้จริง แต่ว่า neokain บอกว่าก็ยังใช้ไม่ได้อยู่ดี

[update 2]: รู้สึกจะดีใจเร็วไปแฮะ … หลังจาก net หลุดไป กลับเข้ามาใหม่ ดัน online ไม่ได้ซะงั้น T_T

10 วิธีการฆ่าเมีย

เจอมาจาก กระทู้ชื่อเดียวกันใน thaimacclub.net คนที่ post บอกว่าได้จาก forward mail อีกที อาจจะเก่านะ แต่ว่าเจ๋งว่ะ

  1. มันอยากกินอะไรซื้อให้มันกิน จนมันคอเรสโตรอลสูง ไขมันอุดตันในเส้นเลือด เดี๋ยวไม่เกิน 50 ปีมันก็ตาย
  2. มันอยากได้เครื่องเพชรก็ซื้อให้มัน พอแสงเพชรมันสะท้อนเข้าตามันมากๆเข้า เดี๋ยวตามันก็จะบอด พอมันตาบอดแล้วเราก็เอามันไปทิ้งที่ไหนก็ได้ มันหาทางกลับบ้านไม่ถูกแล้ว
  3. มันชอบรถก็ซื้อให้มัน ยิ่งแพงๆยิ่งดี เครื่องมันแรงดี มันจะได้ขับเร็วๆ ความเสี่ยงสูง
  4. มันอยากไปเที่ยวไหนก็พามันไป ต้องมีซักที่แหล่ะที่มันพลาดเดินล้มหัวฟาดพื้นตายได้
  5. งานบ้านอย่าไปให้มันทำ เราต้องแย่งมันทำให้หมด ไม่เปิดโอกาสให้มันได้ออกกำลังกาย เดี๋ยวมันก็ไม่แข็งแรง แล้วมันก็ตายเอง
  6. ต้องพาเมียไปหาหมอบ่อยๆ ดูดิคนไม่ค่อยไปหาหมอไม่ค่อยเป็นไรหรอก คนที่ไปหาหมอบ่อย เดี๋ยวๆก็ตายแล้ว
  7. เงินเดือนออกมาเท่าไหร่ให้มันไปให้หมด ใครๆก็รู้ว่าเงินน่ะเป็นที่สะสมเชื้อโรคสารพัด เราแกล้งเอาเชื้อโรคให้มันเก็บไว้เดี๋ยวมันก็เป็นโรคตาย เราเองไม่ต้องเก็บเชื้อโรคไว้ สุขภาพแข็งแรง..เย้
  8. ปลูกบ้านหลังใหญ่ๆให้มันอยู่ กว้างๆยิ่งดี เวลาจะเดินจากห้องนั้นไปห้องนี้ทีมันจะได้เหนื่อย เผลอๆอาจหอบตายระหว่างทางได้
  9. เช้า-เย็นกราบมันทุกวัน มันจะได้อายุสั้น
  10. รักเมียให้มากๆ ไม่เคยได้ยินเหรอ ที่ใดมีรักที่นั่นมีทุกข์ พอมันทุกข์มากๆมันก็ตรอมใจตายเอง

ปฏิบัติตามกันตามสะดวกนะครับ พวกไม่รักภรรยาทั้งหลาย จะได้ตายไวๆ ;-P

ของเล่นใหม่: Mac mini (review)

อยากได้เครื่องซักเครื่องมาเป็น internal application server ใน lab มานานแล้ว เพราะว่าให้พวกผู้ช่วยพัฒนาโปรแกรมสำหรับใช้งานภายในขึ้นมาหลายตัว แต่ว่ามันกระจายๆ อยู่ตามเครื่องคนที่พัฒนา (ทั้งหมดเป็น laptop) ทำให้มีปัญหาในการเรียกใช้งานเยอะมาก เพราะว่าไหนเลยจะต้องบอกให้น้องเค้า start application server (ถ้าเป็น rails ก็พวก embedded server ในตัว application ทั้งหลาย) แล้วก็ถาม IP กันวุ่นวาย แล้วพวกข้อมูลก็เอามาใช้ด้วยกันลำบากอีกตะหาก เพราะว่า db มันเก็บคนละเครื่องคนละที่ ถ้าจะให้เปิด REST ให้ใช้ มันก็ขี่ช้างจับตั๊กแตนไปหน่อย

ว่าแล้ววันหนึ่ง เราก็เห็นว่า เออ มันไม่ค่อยจะเข้าท่าเท่าไหร่ถ้าจะทำแบบนี้ต่อไป ซื้อ dedicated internal server มาเลยตัวนึงดีกว่า ว่าแล้วเราก็บึ่งไปในกรุงเทพ หิ้ว Mac mini รุ่น 1.83 GHz กลับมาหนึ่งตัว

  • สิ่งแรกที่ทำก็คือ ลงเครื่องใหม่ จริงๆ อยากจะลง Mac OS X Server เพราะว่าจะได้ลองหัดเล่นจริงๆ จังๆ ซะที แต่ว่าก็ไม่อยากจะทำผิดลิขสิทธิ์อ่ะนะ อีกอย่างแค่ใช้เป็น internal application server นี่แค่ใช้ client edition ก็เหลือเฟือแล้ว ว่าแล้วก็ลง OS X 10.4.10 ไป
  • ตั้งชื่อเครื่องก่อน ..​ เอาชื่ออะไรดี ตอนนี้เครื่องของผม (PB17″ ที่ผู้ช่วยคนหนึ่งใช้ กับ MBP15″ ของผม) ชื่อ chaos กับ entropy ตามลำดับ ..​ อืมมม ตอนแรกคิดว่าจะตั้งชื่อ turing แต่ว่าไปๆ มาๆ เนื่องจากตัวมันเล็ก ก็เลยตั้งชื่อว่า quantum
  • แล้วลงก็ iWork กับ iLife …​ ซึ่งจริงๆ แล้วก็คงไม่ได้ใช้เครื่องนี้หรอก แต่ว่าก็เผื่อไว้ก่อนไม่เสียหลาย ถ้ามันไม่ได้ใช้จริงๆ แล้ว HDD มันจะเต็ม ก็ค่อยมาลบทิ้งเอาทีหลังได้
  • ลง Xcode จะได้ compile โปรแกรมที่จะต้องใช้งานได้
  • อืมมม อยากได้พวก lib ต่างๆ ทำไงดีหว่า จะ compile ลงใหม่ก็ขี้เกียจ ก็เลย copy /sw (ที่ๆ Fink มันลงโปรแกรม; ผมไม่ได้ใช้ MacPorts นะ เพราะว่ามันมีปัญหาอะไรไม่รู้กับ netไม่work ที่มหาวิทยาลัย)
  • จากนั้นก็ เลือก copy /usr/local ไปลงด้วย ตรงนี้ก็ประหยัดเวลาไปได้เยอะเหมือนกัน แทนที่จะต้องไป compile ใหม่หมด อีกอย่าง ปกติเวลา compile พวกนี้ผมไม่ได้ fine-tune พวก options ให้มัน optimized มากไปกับเครื่องใดเครื่องหนึ่ง (เครื่องที่ผมใช้น่ะแหละ) อยู่แล้ว ก็เลยใช้ได้ อ่อ แล้วก็เวลาที่ลงโปรแกรม ถ้ามันใหญ่หรือว่าเป็นโปรแกรม+lib (ไม่ใช่ lib อย่างเดียว) เช่น ImageMagick หรือว่า Graphviz เนี่ย ผมจะ configure ให้มี prefix ที่ /usr/local/[program_name] อยู่แล้ว ก็เลยเลือกง่ายหน่อย
  • เนื่องจากว่า application ส่วนมากที่จะไปลง จะเป็น Rails application ก็เลยทดสอบ ruby กับ rails ก่อน ปรากฏว่าใช้ได้ไม่มีปัญหาอะไร โดยที่ไม่ต้องลงอะไรเพิ่มเติม (ก็เล่น /usr/local มาแล้วนี่หว่า)
  • เนื่องจาก netไม่work ที่ ม. มันมักจะมีปัญหาอะไรก็ไม่รู้อยู่บ่อยๆ ก็เลยให้ตัว Mac mini นี้เปิด network ของตัวเอง เวลาที่คนจะใช้ application ตัวนี้ก็ connect เข้ามาใน network นี้เอา
  • แต่ว่าปัญหาก็คือ application บางตัวดันต้องใช้ web services ของ amazon ก็เลยไม่มีทางเลือก ต้องกลับเชื่อมกับ network ที่มันออกข้างนอกได้ (ขี้เกียจ setup)
  • ตอนนี้ก็เริ่ม deploy application หลายตัวลงไปใช้แล้ว ทำงานได้ดีนะ พวกบรรดาผู้ช่วยที่ทำงานก็ชอบกัน ได้มี dedicated server กับ internal application ตัวโน้นตัวนี้ที่ทำเล่นกันใน lab เสียที จะได้เป็นต้นแบบ/ตัวทดลองก่อนที่จะไป deploy ลง Xserve ที่เพิ่งจะได้มาใช้งานจริงซะที
  • นอกนั้นไม่ได้ทำอะไรมาก
  • อ่อ ลืมบอกไป ซื้อ keyboard ถูกๆ กับ mouse ถูกๆ มาอย่างละตัวเพื่อมาใช้งานกับตัวนี้ เพราะว่าคงไม่ได้ใช้งานมันตรงๆ มากมาย ส่วนมากก็ remote login เข้ามามากกว่า ส่วนจอ ก็แบ่งๆ จอ external ของผมไปใช้งานเป็นครั้งคราวถ้าจำเป็น (ผมมี Acer 22 นิ้วอยู่ตัวนึงน่ะ ต่อเป็น 2nd monitor ไว้)

สรุปว่า มันเป็น a cute little machine นะ ชอบๆ แต่ว่ามันก็ powerful enough สำหรับงานที่ผมเอามาใช้มันน่ะแหละ (ยิ่งคิดถึงว่า มีบางที่ บางคน บางองค์กร ซื้อ Mac Pro รุ่นใหม่มาเพื่อทำ data entry เท่านั้น ที่ก็ไม่ได้มีมากมายเท่าไหร่ …​ นี่ยิ่งรู้สึกว่า เราคงใช้งาน Mac mini ตัวนี้คุ้มกว่าล่ะนะ) จริงๆ น่าจะซื้อมานานแล้วจริงๆ (ก็ว่าจะ ว่าจะ ว่าจะอยู่หลายครั้งแล้ว บอกเด็กๆ ที่ทำงานไปหลายครั้งแล้ว แต่ว่าเราก็ไม่ได้ซื้อเสียที) น่ารักดีเวลาวางมันไปบนโต๊ะ ใครจะไปคิดว่ามันเป็น server ล่ะ

ไม่แปะรูปนะ ไว้แปะร่วมกับ entry เรื่องของเล่นชิ้นต่อไปเลยละกัน (ยังไม่บอกว่ามันคืออะไร) เพราะว่าถ่ายรูปคู่กันไว้อยู่

ชีวิตคนทำงาน

เห็นรูปนี้จาก MSN น้องโตโต้ (protocoltoto ใน blog นี้) มานานล่ะ วันนี้ไม่รู้นึกยังไงก็เลยเอามา share กันบ้าง ไม่รู้ว่า original creator เป็นใคร แต่ว่า creative มากมาย ชอบ


Syntax highlighting

คิดๆ อยากจะเขียน code snippet (ที่ไม่เกี่ยวกับ mac development) ลงในนี้บ้างเหมือนกัน แต่ว่ามันไม่มี highlighting เจ๋งๆ เลย ไอ้ตัวที่ใช้อยู่นานนมกาเลอย่าง code2html ก็ดันไม่ highlight Haskell อีก จะเขียนเพิ่มเข้าไปเองก็ขี้เกียจ (ทั้งๆ ที่จริงๆ ก็ทำได้อ่ะนะ แต่ว่า code มันเขียนแบบ Perl-ish มากกกกก แถมไม่ factored ไม่แยก module เท่าไหร่) … อืมมม มันต้องมีคนคิดเหมือนเราสิ ว่าแล้วก็เริ่มหา

สักพักก็ไปเจอหน้า Plugins/Syntax Highlighting ที่ WordPress เอง แต่ว่าเท่าที่อ่านๆ ดูไม่ค่อยจะมีตัวไหนเข้าท่าเลยแฮะ (มันไม่ highlight Haskell ซักกะตัว เท่าที่อ่านแบบผ่านๆ) นอกจาก Vim Color แต่ว่าไอ้ตัวนี้ก็ดันไป dependent กับ Text::VimColor ที่เป็น Perl module ต้องลงผ่าน CPAN อีก เออ ไม่เป็นไร ลงก็ได้ แต่ว่าก็ดัน build ไม่ผ่านซะงั้น (test ผ่านน้อยไปหน่อย) จะ force install ลงเลย ก็ดันไม่ work อีก เฮ้อ เบื่อจริง ก็เลยต้องหาต่อไป

และแล้วเราก็ไปเจอ GeSHi: Generic Syntax Highlighter ที่เขียนในภาษา PHP เราก็เลยเอามาเขียนทำเป็น command line application ง่ายๆ ที่อ่านไฟล์ตาม argument แล้วก็เดาภาษาจาก extension ของไฟล์ แล้วก็พ่น highlighted code ที่เป็น HTML ออกมาให้เรา code-paste ใส่ blog ได้ผลดังนี้ (Haskell)

import List
 
permute [] = [[]]
permute xs = [x:ys | x <- xs, ys <- permute (delete x xs)]
 

หรือว่าภาษา Ruby แบบนี้

class Array  
  def permute
    return [self] if size < 2
    perm = []
    each {|e| (self - [e]).permute.each {|p| perm << ([e] + p)}}
    perm
  end
end
 
[0,1,2,3].permute.each {|e| p e }

ก็ใช้ได้อ่ะนะ แต่ว่ามันอาจจะรก HTML code ไปหน่อยนึง

[update 1]: พอมี line number แล้วมันเละใน blog แฮะ เลยเอาออก ไว้จะแก้ CSS ทีหลัง ตอนนี้ขี้เกียจ (อีกล่ะ)

[update 2]: เพิ่งจะสังเกตจากหน้า web ว่า \\ ใน code haskell มันหายแฮะ เหลือแค่ตัวเดียว .. ไม่รู้เหมือนกันว่าทำไม code ฝั่งนี้ก็ยังอยู่นะ เลยไม่รู้จะว่าไงดี :-(

[update 3]: สุดท้ายก็เลยลงเอยด้วยการเขียน code ใหม่ไม่ให้มันมี \\ อืมมม อ่านเป็นภาษาคนกว่าเก่าแฮะ แต่ว่ามัน geek-ish น้อยลง :-P

[update 4]: อ๊ากกก GeSHi มันไม่มี Erlang highlighting! ว้า กำลังจะหัดเล่นอยู่เลย ว่าแต่ Erlang นี่ทำไมมันลูกเมียน้อยตอนนี้จังเลย emacs ก็ไม่มี (ผมใช้ Carbon Emacs distribution) TextMate ก็ไม่มี มีแต่ vim … สุดท้ายก็ตายรังสินะ แต่ว่า Emacs mode ของ Erlang ก็ไม่น่าหายากเท่าไหร่ [note — ณ ปัจจุบัน เจอแล้ว] ไม่เป็นไร มีเวลาและชินๆ กับ Erlang มากกว่านี้เมื่อไหร่ (พอจะชินกับ module/keywords) แล้วเดี๋ยวค่อยทำเพิ่มเข้าไปใน GeSHi เองก็ได้วะ

ซื้อ software แท้ vs. crack/เถื่อน

Dilemma (ทางสองแพร่ง) ที่มีมาช้านานในบ้านเรา ว่าซอฟต์แวร์ที่เราใช้เนี่ย จะซื้อของแท้ หรือว่าหาใช้ของเถื่อนตามศูนย์ซอฟต์แวร์แห่งชาติ หรือว่าดาวน์โหลดจากเน็ต ซึ่งคำตอบของทางเลือกมันก็ขึ้นกับหลากหลายปัจจัยด้วยกันล่ะนะ

  • หลายคน (ความเชื่อสาธารณะ) ยังคงมองซอฟต์แวร์ ว่าเป็นสิ่งที่แถมมากับเครื่องอยู่ พอจะซื้อเครื่องใหม่ ก็มักมีค่านิยมให้ร้าน load โปรแกรมให้เยอะๆ จะใช้ไม่ใช้อีกเรื่องนึง load ไว้ก่อน ซึ่งก็เลยกลายเป็นงูกินหางกับทางร้าน เพราะว่าการ load ซอฟต์แวร์ที่ลูกค้าต้องการให้ได้ กลายเป็น competing feature หนึ่งไปซะงั้น
  • Trialware/Shareware หลายตัวที่มีให้ download ใช้เพื่อทดลองจากเน็ต พอหมดอายุหรือว่าหมด feature เราก็มักจะนิยมทำการ “หา crack” หรือ “หา serial” ที่มันก็ไม่ได้หายากหาเย็นเท่าไหร่ เป็นอันดับแรกๆ ในความพยายามที่จะทำให้เราได้ใช้ซอฟต์แวร์ตัวนั้นๆ ต่อไป
  • ราคา อันนี้เรื่องใหญ่และเป็นปัญหาโลกแตก … จ่ายแพงกว่าทำไม ในเมื่อจ่ายร้อยเดียวได้ (หลายโปรแกรมด้วย) ทำไมต้องจ่ายเป็นพันด้วย? (ไม่ใช่แค่พันหรอก ซอฟต์แวร์บางตัวแพงกว่าเครื่องอีก อย่าง Mathematica เงี้ย ซื้อ laptop ได้สองเครื่องสบายๆ)
  • Availability อันนี้อาจจะเป็นเรื่องใหญ่กว่าด้วย … โปรแกรมหลายตัวอยากใช้ด่วนน่ะ แต่ว่ามันไม่มีขาย ติดต่อตัวแทนจำหน่ายก็เรื่องมาก ท่าเยอะ ต้องมีกระบวนการมากมายวุ่นวาย ทั้งเรื่องการเงิน ฯลฯ เฮ้อ ขับรถไปศูนย์ซอฟต์แวร์แป๊บเดียว ดีกว่ากันเยอะ
  • Support เราหลายคนก็ไม่ได้ต้องการ support อะไรมากมายกับโปรแกรมที่เราซื้อมาซะด้วย เพราะว่าส่วนมากก็ไม่ได้ใช้งานมากอะไรถึงขนาดที่ทำให้ support มัน crucial ขึ้นมา ใช้งานงูๆ ปลาๆ ไม่กี่ feature ไม่กี่อย่าง คลำๆ เอาเอง หรือว่าถ้ามันไม่ work จริงๆ ก็ไปเรียนเอา หรือว่าหาคนสอนแถวๆ ไหนก็ได้เอา

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

แล้วผมเขียนถึงเรื่องนี้ทำไม …​ พอดีวันนี้ iWork 08 หมดอายุ trial 30 วันแล้ว ก็เลยไปซื้อของแท้แบบมีกล่องมาซะหน่อย (จริงๆ ซื้อ license/serial ผ่าน net ก็ได้ แต่ว่าไหนๆ มันก็ราคาพอกัน ได้กล่องด้วยดีกว่า .. พวกบ้าวัตถุก็เงี้ย) …​ แล้วผมทำงั้นไปทำไมล่ะเนี่ย ก็ในเมื่อ iWork มันก็หา serial เถื่อนได้นี่ (จริงๆ ผมก็มี serial เถื่อนอยู่ในมือเรียบร้อยแล้วล่ะ)

ผมยืดถือธรรมเนียมปฏิบัติส่วนตัวอยู่ไม่กี่ข้อในการใช้ซอฟต์แวร์นะ

  1. Freeware/Free Software/Open Source มาก่อนเสมอ ถ้าทำได้ จ่ายแพงกว่าทำไมถ้ามีของฟรี (จริงๆ ไม่ใช่ละเมิดเค้ามา) หลายตัวมันไม่ feature-complete แต่ว่าถ้าเราต้องการใช้มากกว่านั้นและบังเอิญมันมีใน commercial software ก็จ่ายตังค์ซื้อ feature พวกนั้นไปสิ ถ้าเราไม่มีปัญญาจ่ายก็ถือว่าเราไม่ได้ต้องการมันจริง (รักจริงต้องสู้สินสอดได้) และใช้ๆ ไปเถอะ เราจะพบว่าหลายครั้งเราหลอกตัวเองว่าเราต้องการโน่นนี่ จริงๆ ไม่มีไม่ตายหรอก พวก Freeware/FS/OS พวกนี้หลายต่อหลายตัว “เจ๋ง” กว่าที่หลายคนคิดเยอะ
  2. ถ้าจำเป็นจริงๆๆๆๆ ก็ใช้มันไปเถอะ ไอ้ซอฟต์แวร์เถื่อนน่ะ แต่ว่านี่หมายถึงต้องหา Freeware/FS/OS ที่ทำงานแทนได้แบบสุดความสามารถแล้วนะ ห้ามเอามาเป็นข้ออ้างเด็ดขาดด้วย และต้องใช้ในการทำมาหากิน “เท่านั้น” และ
  3. “ถ้า” เราทำเงินจากมัน ไม่ว่าจะโดยตรงหรือโดยอ้อม ได้มากกว่าราคาซอฟต์แวร์ตัวนั้นเมื่อไหร่ เราจะต้องซื้อมันแบบถูกต้อง ไม่มีข้ออ้าง เพราะว่าคุณทำเงินได้มากกว่าราคามันแล้วนี่

ผมก็เลยลองไล่ซอฟต์แวร์ในเครื่องดู พบว่าผมมี Freeware/FS/OS ค่อนข้างหลายตัวที่เป็นชิ้นส่วนสำคัญในการทำงานของผม ส่วนโปรแกรมที่ผมใช้ทำงานจริงๆ ผมก็เสียเงินซื้อเสียเป็นส่วนมาก (เช่น iWork ที่ Pages มันช่วยชีวิตผมในการทำ poster งานวิจัยมาหลายครั้งแล้ว และ Keynote ที่ถ้าไม่มีมัน ชีวิตผมในฐานะวิทยากรรับเชิญตามที่ต่างๆ และอาจารย์ประจำ คงจะกร่อยไปอีกเยอะ แล้วก็มี TextMate อีกตัว และอื่นๆ อีกหลายตัวด้วย) ….​ส่วนที่ยังใช้แบบเถื่อนอยู่ก็มีบ้างแหละครับ แต่ว่านั่นเป็นเพราะผมต้องใช้มันบ้าง (อย่างมากก็เดือนละครั้ง) .. แต่ไม่เคยทำเงินจากมันได้ไม่ว่าจะตรงหรืออ้อม และหาตัวแทนมันไม่ได้จริงๆ (พยายามหาแล้ว หาอีก หาแล้ว หาอีก) .. ก็ถือว่ายังตรงกับธรรมเนียมตัวเองล่ะนะ

ปล. ผมเห็นน้องๆ หลายคนนะ หัดเขียนโปรแกรมจะต้องใช้ Visual Studio Enterprise Architect edition ทั้งๆ ที่จริงๆ แล้ว Express (ซึ่งฟรี) มันก็มี หรือว่าหลายคนหัดทำ 3D ก็ไปใช้ Maya “Unlimited” ทั้งที่จริงๆ แล้ว Personal Learning Edition มันก็มี ..​ ฯลฯ

ว่าแต่คุณล่ะ มีหลักการ/ธรรมเนียมปฏิบัติยังไงในการใช้ซอฟต์แวร์?

[update 1]: ขอขยายความข้อ 2 นิดหน่อย คือบางคนชอบเอาข้ออ้างที่ว่า “ต้องการศึกษาเพื่อนำไปใช้งาน” โดยมากมักจะเกิดขึ้นกับซอฟต์แวร์ที่เป็นระดับ professional เช่นฐานข้อมูล Oracle ชุดพัฒนาซอฟต์แวร์ VS.NET Enterprise Architect โปรแกรมแต่งภาพ Photoshop CS3 โปรแกรม 3D Modeling/Animation เช่น Maya Unlimited บางทีก็เข้าใจและเห็นด้วยนะ ที่ว่าบางทีเราก็ต้องการเรียนรู้โปรแกรมพวกนี้เพื่อนำไปทำงานจริงในอนาคต ซึ่งโปรแกรมพวกนี้จริงๆ แล้วหลายตัวก็จะมี scaled-down version ให้ใช้ฟรีหรือราคาถูก และไม่ยอมให้นำไปใช้เพื่อทำการค้าได้ ให้ใช้อยู่แล้ว ถ้าจำเป็นต้องใช้โปรแกรมพวกนี้จริงก็ค่อยซื้อ version ที่เหมาะสมเอาทีหลัง หรือว่าถ้ามันไม่มี version อย่างที่ว่าจริงๆ (แต่ว่าบางทีก็มี trial-ware version) ก็ใช้เถื่อนใช้ crack ไปก่อน จนกระทั่งเราทำเงินกับมันได้ ซึ่งเร็วหน่อยก็ดี และซื้อใช้ซะ

ร้าน Kinokuniya ที่ Siam Paragon

ด้วยความที่เป็นคนชอบอ่านหนังสือมาก แล้วก็ซื้อหนังสือเก็บไว้เยอะเหมือนกัน (เดือนๆ หมดหลายตังค์) ก็เลยเป็นขาประจำของร้านหนังสือหลายๆ ที่ ไม่ว่าจะเป็น B2S (มักจะไปที่ Central ปิ่นเกล้ามากกว่าที่อื่น Central World ไปบ้าง), Asia Books (หลายสาขา โดยมากไปซื้อ magazines), ศูนย์หนังสือจุฬาฯ ก็ไปเหมือนกัน แต่ว่าพักหลังๆ ไม่ค่อยได้ไปแล้ว

แต่ไม่ว่าที่ไหนๆ ก็ไม่ค่อยจะมีหนังสือแบบที่ผมชอบอ่านมากที่สุดเท่าไหร่นัก ….

  • หนังสือแนววิชาการหนักๆ สำหรับหลายสาขานี่อาจจะหาอ่านไม่ยากเท่าไหร่ที่ศูนย์หนังสือจุฬา แต่ว่าหนังสือวิชาการเกี่ยวกับ Computer/Computing Science นี่ไม่ค่อยจะมีเท่าไหร่หรอกนะ มันมีแต่หนังสือ Professional books ซะเป็นส่วนมาก (ก็เข้าใจว่านี่อาจจะเป็นความต้องการของตลาดบ้านเรา)
  • หนังสือ Popular science นี่หายากมาก ไม่ค่อยจะมีเลยแฮะ นานๆ จะเจอบ้างที่ Asia Books (Siam Discovery) หรือว่า B2S Central World และนี่คือสิ่งที่ผมคิดถึงที่สุดเวลาไปร้านหนังสือหลายๆ ที่ใน Tokyo อาจจะเรียกได้ว่าเมื่อก่อนผมหมดเงินไปกับการซื้ิอหนังสือแนวนี้อาจจะพอๆ กับหนังสือวิชาการหนักๆ เลยก็ได้มั้ง

ตัวอย่างหนังสือ Popular science ที่ผมชอบมากเป็นพิเศษก็คงจะเป็น Emperor’s New Mind ของ Roger Penrose, Chaos ของ James Gleick, Linked ของ Albert-Laszlo Barabasi, Ubiquity ของ Mark Buchanan แล้วก็ยังมีอีกหลายต่อหลายเล่มที่ถ้าจะเอามา list ไว้ในนี้หมดคงจะไม่ค่อยเข้าท่าเท่าไหร่

ที่ผมชอบหนังสือพวกนี้ก็เพราะว่า มันให้ความรู้เราพอประมาณ อาจจะไม่ค่อยลึกเท่าไหร่นักในแต่ละเรื่อง แต่ว่าให้เราเห็นคู่ไปกับความเป็นจริง สิ่งที่อยู่รอบตัว เหตุการณ์ต่างๆ ที่เรารู้จักดีมากอยู่แล้ว สิ่งที่จับต้องได้ง่าย ฯลฯ หลายต่อหลายเล่มเป็นการเชื่อมโยงทฤษฎีต่างๆ นับสิบเข้าด้วยกันเป็นเรื่องเดียว (เช่น Emperor’s New Mind) หรือว่าให้แนวคิดใหม่ๆ แบบที่ไม่ค่อยจะได้เท่าไหร่นัก

และถ้าเราสนใจเรื่องใดเรื่องหนึ่งมากๆ ขึ้นเมื่อไหร่ ค่อยไปหาอ่านเอาตามหนังสือทฤษฎีที่หนักขึ้น complete ขึ้น และเป็นวิชาการมากขึ้น

น่าเสียดายเหลือเกินที่หนังสือแนวนี้หาอ่านยากมากในบ้านเรา … และแล้ววันนี้ความฝันของผมก็เป็นจริง

หลังจากไม่ได้ไปที่ Siam Paragon นานมาก (แต่ว่าไปทีไรก็ไปไม่กี่ที่ ส่วนมากไปนั่งกินข้าวร้านข้างล่าง ไปซื้อ/ดูหนังสือที่ Kinokuniya ไปเดินเล่นใน iStudio แล้วก็ไปยืนเกาะกระจกน้ำลายยืดอยู่แถวๆ Showroom Mesarati) วันนี้้เบื่อโลกมากเลยเข้าไปดู และนี่คือสิ่งที่ผมเห็น


ว้าว ตู้หนังสือขนาด(ค่อนข้าง)ใหญ่ทั้งตู้ ที่มีแต่หนังสือ Applied Math (สำนักพิมพ์ Dover ที่มีหนังสือ classic ราคาถูกค่อนข้างเยอะ เล่มไม่กี่ร้อย) หนังสือ Physics และแน่นอน หนังสือ Popular Science หลายสิบเล่ม!

ก็เลยตบกลับมาบ้านอีกเกือบ 10 เล่ม มีหลายเล่มที่น่าสนใจ เช่น I am a Strange Loop ของ Douglas Hofstadter (คนเขียน Godel, Escher, Bach หนังสือที่ผมชอบที่สุดตลอดกาล), The Age of Spiritual Machines ของ Rayn Kurzwell, Why Things Bite Back ของ Edward Tenner, The Equation that Couldn’t be Solved ของ Mario Livio, และสุดท้าย Meta Math! The Quest for Omega ของ (ทายซิใคร) Gregory Chaitin!!!! (บิดาของ Algorithmic Information Theory)

แล้วก็เดินเลยเข้าไปหน่อย เจอหนังสือวิชาการหนักๆ ของทาง Computer Science ด้วยแฮะ!! (ไม่ใช่หนังสือ Professional Books ที่ขายกันเกลื่อนหิ้งหนังสือที่เขียนว่า “Computer Science” ทั่วไป แม้แต่ศูนย์หนังสือจุฬา) เลยซื้อ Fundamentals of Natural Computing: Basic Concepts, Algorithms, and Application ติดมือกลับมาเล่มนึง จริงๆ อยากได้อีกหลายเล่มแต่ว่าสงสารบัญชีธนาคารของตัวเอง …. เล่มนี้ก็ดีนะ คิดว่าจะเอามาเป็นหนังสือ Introduction ของคนที่อยากจะเข้า lab วิจัยเลย เพราะว่านอกจากจะมีเรื่อง Evolutionary Computation แล้วยังมีพวก Swarm Intelligence, Fractals Geometry, Artificial Life, DNA Computing, Quantum Computing ด้วย

เฮ้อ … เมืองไทยเจริญขึ้นเยอะเลยแฮะ (ถ้าคิดจากวัตถุที่เรามีในประเทศนะ … หนังสือคือวัตถุประเภทหนึ่ง) แต่ว่าคนบ้านเราจะเจริญตามด้วยหรือเปล่าน้อ หรือว่าเจริญลงก็ไม่รู้แฮะ (ไม่รู้ว่าตอนนี้คนไทยอ่านหนังสือกันเฉลี่ยแล้วปีละเท่าไหร่แล้ว .. ตัวเลขสุดท้ายที่ได้ยินนี่น้อยจนน่าใจหาย … หนังสือใน lab เราก็ซื้อมาเต็มตู้ เด็กๆ ที่ทำงานด้วยก็ไม่ค่อยจะอ่าน ไม่เคยอ่าน ไม่ค่อยจะสัมผัส ถึงจะบังคับ ถึงจะพยายามแนะนำให้อ่าน ถึงจะฯลฯ แล้วก็เถอะนะ)

ไม่เป็นไรน่า …. ก็ยังมีเรื่องให้ใจชื้นน่ะแหละ