Category: Python

0

Python: Object-Oriented #1: Monkey Patch

เกริ่นนำ ภาษา Python นั้นรองรับกระบวนทัศน์ในการเขียนโปรแกรม (paradigm) ได้หลายแบบ ขึ้นอยู่กับว่าผู้เขียนโปรแกรมจะเลือกใช้งานอย่างไร ซึ่งแน่นอนครับ ในยุคที่หายใจเข้าออกเป็น object อย่างทุกวันนี้ ภาษา Python ก็สามารถรองรับกระบวนทัศน์ Object-Oriented ได้ ไม่ใช่แค่ได้นะครับ ทำได้ดีด้วย ซึ่งผมจะค่อยๆ เล่าให้ท่านฟัง เนื้อหาในบทนี้จะเน้นเรื่องเก็บตกที่ผมยังไม่ได้พูดถึงใน ECMAScript โดยอาศัย Python เป็นสื่อแทน ดังนั้นจะมีเนื้อหาบางส่วนซ้อนทับกับ ECMAScript บ้าง และส่วนที่ไม่ซ้อนทับก็สามารถใช้งานได้กับ ECMAScript เช่นกัน ลองประยุกต์ดูครับ We’re all consenting adults more »

ก้าวแรก HPC #10: ทลายขีดจำกัดด้วย ZeroMQ 0

ก้าวแรก HPC #10: ทลายขีดจำกัดด้วย ZeroMQ

เกริ่นนำ ที่ผ่านมาเราได้เรียนรู้ในการรีดกำลังของ CPU มาใช้ให้เต็มประสิทธิภาพซึ่งก็ผ่านไปด้วยดี ผลลัพธ์เป็นที่น่าพอใจ ในบทนี้เราจะไปกันต่อ เมื่อเราสูบทรัพยากรของเครื่องคอมพิวเตอร์หมดแล้ว เราก็ต้องไปสูบเครื่องอื่นต่อไป ใช่ครับ เรากำลังพูดถึงการทำงานแบบคลัสเตอร์ นั่นก็ไม่ใช่เรื่องใหม่สำหรับเรานัก เพราะได้ผ่านหูผ่านตามาจาก Apache Spark ไปแล้ว ตัวของ Apache Spark นั้นให้เราได้ทุกสิ่ง เหลือเพียงอย่างเดียวที่เรายังไม่ได้ก็คือประสิทธิภาพ ในบทนี้เรามาทวงถามหาประสิทธิภาพกัน เปิดเรื่องด้วย Message Queue บทความนี้เราจะใช้งาน ZeroMQ ซึ่ง MQ ในที่นี้ย่อมาจากคำว่า message queue เราจึงควรทำความเข้าใจเป็นปฐมกันก่อน คำว่า message more »

ก้าวแรก HPC #09: Thread Library เก่าแต่เก๋า 0

ก้าวแรก HPC #09: Thread Library เก่าแต่เก๋า

เกริ่นนำ เราเริ่มแหย่ขาเข้าสู่โลกแห่งการประมวลผลแบบขนาน โดยผ่านเรียนรู้จากการใช้งาน Apache Spark ซึ่งเป็นโมเดลการเขียนโปรแกรมแบบ MapReduce ที่ได้รับความนิยมอย่างสูงในยุคปัจจุบัน แต่โจทย์เราอาจจะไม่เหมาะสมกับเครื่องมือ เลยทำให้ได้รับผลตอบสนองที่สอบตกทุกวิชา มาวันนี้เราจะย้อนกลับไปโมเดลดั่งเดิม โมเดลที่ไม่ค่อยมีใครเขียนกันแล้วเพราะยุ่งยาก ส่วนมากก็ไปใช้ library ที่ขี่บนโมเดลนี้อีกที โมเดลนี้ก็คือ Fork-Join นั่นเอง ผมว่าถ้าเรียนรู้อย่างเป็นระบบแล้ว ก็ไม่ได้ยุ่งยากอะไร เปิดใจให้กว้างแล้วมาเรียนรู้ด้วยกันครับ เรียนรู้ศัพท์การประมวลผลแบบขนานผ่านมุมมองประวัติศาสตร์ ใครเคยเขียนโปรแกรมทำงานบนโมโครคอนโทรลเลอร์ขนาดเล็กจะเข้าใจดีว่า เมื่อเราเขียนโปรแกรมเสร็จ คอมไพล์ แล้วโหลดโปรแกรมจากคอมพิวเตอร์ไปเก็บไว้ใน flash ของไมโครคอนโทรลเลอร์แล้วก็บูทใหม่ เท่านี้โปรแกรมก็จะเริ่มทำงาน ไม่เห็นจำเป็นต้องมี OS แต่อย่างใด  โปรแกรมที่รันนั้นเป็นโปรแกรมเดียว ไม่สามารถทำงานพร้อมกันหลายโปรแกรมได้ more »

ก้าวแรก HPC #08: Apache Spark กับงาน Big Compute 0

ก้าวแรก HPC #08: Apache Spark กับงาน Big Compute

เกริ่นนำ เราเดินทางตามสายธารของเวลา จากก้าวแรก มาถึงบทความนี้เป็นก้าวทีแปดแล้ว ผมวางพื้นทฤษฎี เครื่องไม้เครื่องมือ ตลอดจนโจทย์ทดสอบที่ใช้งานมาตามลำดับเป็นที่เรียบร้อย มาบทความนี้เราจะมาเรียนรู้การประมวลผลแบบขนานกัน มารีดกำลังของเครื่องคอมพิวเตอร์ของเราให้เต็มที่ เรื่องการประมวลผลแบบขนานนั้นมีรายละเอียดค่อนข้างมาก ในบทนี้ผมจึงขอแตะแค่ชั้นผิวของมันโดยเสพอาหารกล่องสำเร็จรูป เพียงอุ่นเล็กน้อยก็ทานได้เลย ยี่ห้อ Apache Spark ภาคประวัติ Search Engine ของ Google นั้นนับได้ว่าเป็น Search Engine ที่ดีที่สุดในโลก (ก็ว่าได้) Google Search สามารถค้นหาเอกสารที่มีอยู่มหาศาลใน Internet ได้อย่างรวดเร็ว Google ทำได้อย่างไร ทำไมถึงเก่งกาจขนาดนั้น ความลับนี้ถูกเปิดเผยในงานประชุมวิชาการว่าด้วยเรื่องการออกแบบและสร้างระบบปฏิบัติการ more »

ก้าวแรก HPC #06: อัลกอริทึมประสิทธิภาพสูงและการปรับปรุงประสิทธิภาพ 0

ก้าวแรก HPC #06: อัลกอริทึมประสิทธิภาพสูงและการปรับปรุงประสิทธิภาพ

เกริ่นนำ ในบทความที่แล้วผมนำเสนออัลกอริทึมอย่างง่ายเพื่อใช้หาค่า Bernoulli Number มาบทนี้เราจะไปกันต่อครับ เราจะไปเรียนรู้ถึงอัลกอริทึมที่มีประสิทธิภาพสูง สูงจริงครับ เป็นแชมป์ในตอนนี้ และเช่นเคยครับ เราจะมาเรียนรู้การปรับปรุงประสิทธิภาพของอัลกอริทึม ตลอดจนเฉลยการบ้านที่ค้างคามาจากบทความก่อนหน้า การแข่งขันเพื่อหาค่า Bernoulli Number ในบทความที่ผ่านมา ผมใช้อัลกอริทึมอย่างง่าย นั่นคือ Recursive เป็นหาค่า Bernoulli Number ไปจนถึง B(1000) ท่านสงสัยไหมครับว่าค่า Bernoulli Number ที่สูงที่สุดเท่าที่มนุษย์หาได้คือ B ลำดับที่เท่าไร ผมมีคำตอบครับ ลองดูที่ตารางนี้ดูครับ   ข้อมูลจาก http://en.wikipedia.org/wiki/Bernoulli_number อย่างที่เราทราบกับว่า more »

ก้าวแรก HPC #05: อัลกอริทึมอย่างง่ายและการปรับปรุงประสิทธิภาพ 0

ก้าวแรก HPC #05: อัลกอริทึมอย่างง่ายและการปรับปรุงประสิทธิภาพ

เกริ่นนำ บทความนี้เป็นบทความแรกตั้งแต่เริ่มทำเว็ปนี้ที่เขียนเป็นโปรแกรมจริงๆ  โปรแกรมที่เราจะเขียนกันนั้นก็มาจากทฤษฎีบทก่อนหน้าเรื่องการหาค่า Bernoulli Number นั่นเอง ซึ่งเป็นแบบง่ายที่สุด เป้าหมายที่แท้จริงของบทความนี้คงไม่ใช่อยู่ตัวอัลกอริทึมแต่อย่างใด เพราะไม่มีอะไรซับซ้อนมากมายตรงไปตรงมา แต่หากอยู่ที่อยู่มุมมองเรื่องของประสิทธิภาพ การเขียนโปรแกรมให้ทำงานได้ถูกต้องนั้นเป็นแค่เพียงขั้นแรกเท่านั้น ขั้นต่อไปเราต้องปรับปรุงประสิทธิภาพให้ดีด้วย ในบทความนี้จะใช้ Python เป็นตัวทำ Prototype เมื่อเรียบร้อยแล้วจึงไปใช้ C++ ในกระบวนการสุดท้าย ท่านจะได้เห็น workflow การทำงานจริง เชิญสดับ อัลกอริทึมในการหา Bernoulli Number อย่างง่าย Bernoulli Number ก็เฉกเช่นเดียวกับคณิตศาสตร์ทั่วไปคือมีวิธีหาค่าได้หลายวิธีที่อาจแตกต่างกันโดยสิ้นเชิง ท่านอาจนึกไม่ถึงว่าบางวิธีที่แปลกๆ จะสามารถหาค่าคำตอบถูกต้องได้ แต่ละวิธีนั้นก็มีข้อดีข้อเสียแตกต่างกันไป วิธีเหล่านั้นเราเรียกว่าอัลกอริทึม more »

ก้าวแรก HPC #04 : ตำนาน Note G 0

ก้าวแรก HPC #04 : ตำนาน Note G

เกริ่นนำ ในบทความชุดนี้ ผมจะนำเสนอแนวคิดพื้นฐานในการประยุกค์ HPC กับงาน Big Compute ที่ผ่านมา ผมแนะนำภาษารวมทั้ง Hardware ที่ใช้ มาถึงบทนี้เป็นเรื่องของโจทย์ทดลอง วันนี้เราจะมาคุยเรื่องนี้กัน อาศัยมันเป็นแกนกลาง เพื่อวิ่งเข้าหาเครื่องมือต่างๆ เชื่อว่าวิธีนี้จะเห็นภาพรวมได้ดีกว่า  ถ้าพร้อมแล้ว เรามาเข้าเรื่องกันเลย จากหัวเรื่องบทความนี้ Note G … Note G  มันคืออะไรกัน ใช่ tablet รุ่นใหม่รึเปล่า หรือจะเป็นเรื่องของดาวตลกในตำนานของไทย ไม่ใช่ทั้งนั้นครับ ผมขอทิ้งเป็นปริศนาไว้ก่อน อ่านไปเรื่อยๆ จะทราบเองครับ ในตอนนี้ขอตั้งคำถามก่อน more »

ก้าวแรก HPC #03: การสร้าง Cluster ส่วนตัวราคาถูกและดี

เกริ่นนำ ในบทความก่อนหน้า ผมคุยถึงเรื่องภาษาที่เลือกใช้ไปแล้วได้แก่ภาษา Python และ C++ ตอนแรกคิดว่าบทความนี้จะเข้าเรื่องโจทย์ตัวอย่างเลย แต่มาคิดอีกทียังขาดพื้นฐานที่สำคัญอีกเรื่องหนึ่ง ผมว่าเราควรมาคุยกันก่อนเพื่อจะได้ไม่เสียเวลาย้อนมาคุยกันอีก เรื่องที่ผมจะคุยในบทนี้ก็คือเรื่องเครื่องคอมพิวเตอร์ที่ผมใช้ครับ เนื่องจากเนื้อหาในเว็ปนี้เป็นการประมวลผลแบบขนาน ซึ่งไม่ได้จำกัดว่าจะขนานกับบนเครื่องคอมพิวเตอร์เพียงเครื่องเดียว ผมมีคอมพิวเตอร์หลายเครื่องครับ แต่การเปิดเครื่องคอมพิวเตอร์หลายเครื่องทำงานพร้อมๆ กัน ทั้งกินพื้นที่และกินไฟ ดูยุ่งยากครับ ผมก็เลยจะใช้วิธีเอาเครื่องคอมพิวเตอร์ถูกๆ ถูกจริงๆ ครับ กินพื้นที่น้อยมาก จอภาพแต่ละเครื่องก็ไม่ต้องใช้ ผมใช้ notebook ตัวเดียวเพื่อเข้าไปควบคุมทั้งหมด เป็น Single-board Computer หน้าตาจะเป็นอย่างไร เราไปดูรายละเอียดกันครับ ประวัติ Single-board Computer คอมพิวเตอร์ราคาถูกที่ผมจะใช้นั้น more »

ก้าวแรก HPC #01 : Python 2

ก้าวแรก HPC #01 : Python

เกริ่นนำ ก็อย่างที่กล่าวเอาไว้ในบทความก่อนหน้าว่าเราเน้นกันที่การเขียนโปรแกรม จะเขียนโปรแกรมก็ต้องเลือกภาษา ภาษาก็มีมากมายนับพันภาษา เป็นที่หนักใจสำหรับผมไม่น้อยที่จะคัดออกมาสองสามภาษาเพื่อเอามาใช้งาน ผมนั่งคิดนอนคิดอยู่นานทั้งวิเคราะห์และวิจัย เลยได้ข้อสรุปส่วนตัวมาว่า ภาษาแรกที่เหมาะกับงานทางวิทยาศาสตร์ ซึ่งเป็นแกนหลักของเว็ปนี้คือ Python ถ้าท่านไม่เคยใช้งาน Python ผมว่าคุ้มนะครับที่จะหยิบ Python ใส่ไว้ในกระเป๋าแห่งความรู้ของท่าน แต่ถ้าท่านยังลังเล ลองอ่านบทความนี้ดูก่อน แล้วค่อยสรุปอีกทีว่าดีพอหรือไม่ Python : ที่มาที่ไป ภาษา Python จัดอยู่ในหมวดภาษาทั่วไป ใช้ได้หลายวัตถุประสงค์ รองรับการเขียนโปรแกรมแบบ Imperative, Functional และ Object-Oriented ภาษานี้เกิดขึ้นมานานมากแล้วครับ ตั้งแต่ปี 1991  โดย Guido more »