ComBioLaw.De » Blog » เขียนโปรแกรม

Data-Persistence with ZODB

imageการจัดเก็บข้อมูลถือเป็นส่วนประกอบที่สำคัญมาก ๆ ในการเขียนโปรแกรม และก็เป็นส่วนประกอบที่ทำให้คนเขียนโปรแกรมปวดหวกมากพอ ๆ กัน การจัดเก็บข้อมูลนั้น มีรูปแบบต่าง ๆ มากมาย ไม่ว่าจะเป็นในรูปแบบของ Flat-File, Formated File (XML, Excel, Access), ฐานข้อมูล (SQL, RDBMS) ซึ่งการจัดเก็บข้อมูลแต่ละแบบนั้นก็มีข้อดีข้อเสียต่าง ๆ กัน

การจัดเก็บข้อมูลแบบ Flat-File นั้น มีข้อดีคือง่าย ไม่ซับซ้อน เปิดไฟล์ ปิดไฟล์ เขียนไฟล์ อ่านไฟล์ เป็น ก็ใช้งานได้แล้ว แต่เมื่อไรที่ข้อมูลซับซ้อนเข้า ก็เป็นอันปวดหัว เลยต้องมีการจัดเก็บข้อมูลแบบ Formated File แต่บางฟอร์แมตก็ไม่ใช่มาตรฐานเปิด แถมยังต้องใช้โปรแกรมเปิดโดยเฉพาะ ไม่มี API ให้ใช้งาน จะใช้งานผ่านเนตเวิร์คก็ไม่ได้ หากใช้งานหลาย ๆ คนพร้อมกัน ก็เกิดอาการเสี่ยง เพราะไม่มี transaction และ concurrency เลยต้องมีฐานข้อมูลแบบ RDBMS (Relational Database Management System) ขึ้นมา เช่น MySQL , PostgreSQL , SQLite , Oracle Database , MS SQL Server , etc.

ฐานข้อมูลแบบ RDBMS มีข้อดีคือ รับโหลดในการจัดเก็บข้อมูลได้มหาศาล ส่วนมากมี transaction ให้ใช้ เพื่อลดความเสี่ยงของการสูญเสียข้อมูล เวลาโปรแกรม หรือคอมพิวเตอร์เจ๊ง รองรับการเข้าถึงข้อมูลแบบพร้อมกันหลาย ๆ คนโดยใช้ concurrency มีภาษา SQL ในการบริหารข้อมูล พิมพ์คำสั่งเพียงไม่กี่บรรทัด ก็สามารถ ค้นหา จัดเรียง เพิ่ม ลบ แก้ไข ข้อมูลได้สบายแฮ ไม่ต้องกังวลว่าฐานข้อมูลจะทำงานยังไง

แต่ RDBMS มีข้อเสียคือ สามารถจัดเก็บข้อมูลในรูปแบบตารางเท่านั้น หากต้องการจัดเก็บ Object ในภาษาเขียนโปรแกรมที่เป็น OOP ความยุ่งยากจะมากขึ้นเป็นเท่าทวีคูณ หากเก็บข้อมูลไม่ดี อาจเกิดอาการ mismatch ได้ง่าย ๆ อีกทั้ง เมื่อโปรแกรมมีขนาดใหญ่มาก ๆ เข้า การเขียน SQL เพื่อบริหากข้อมูล อาจทำให้ปวดหัวได้เช่นกัน

ด้วยเหตุนี้ จึงมีคนคิด ...

เขียนโปรแกรม เขียนโปรแกรม

27 Dec 07 | by bow_der_kleine | tags เขียนโปรแกรม Python ZODB Persistence

read 2525 comments 4 read more

C/C++ vs. Fortran in Scientific Programming

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

งานที่ว่านี้เป็นงานวิจัยเกี่ยวกับ Signal Processing ในตัวรับศัญญาณเคเบิลใยแก้นำแสง ที่คณะผมรับมาจากบริษัทเอกชนแห่งหนึ่ง Signal Processing ทั้งหมดจะเป็น Off-line Processing กล่าวคือ สัญญาณรูปแบบต่าง ๆ ที่ออกจากเคเบิลใยแก้วนำแสง จะถูกวัดด้วยตัววัดสัญญาณ แล้วจะถูกเซพไว้ในไฟล์ต่าง ๆ จากนั้นพวกผมจะนำไฟล์เหล่านี้มาใช้ในงานวิจัยเกี่ยวกับ Signal Processing โดยใช้โปรแกรมที่ทำงานบนเครื่งคอมพิวเตอร์ตั้งโต๊ะธรรมดานี่แหละครับ

ที่ต้องทำวิจัยกันแบบ Off-line Processing ก็เพราะว่าช่วยประหยัดงบประมาณไปได้เยอะครับ ไม่ต้องมานั่งวัดสัญญาณใหม่ทุกครั้งที่ต้องทำการทดลอง ทางคณะเองก็ไม่ต้องมีห้องทดลองเป็นของตัวเอง ใช้วิธียืมข้อมูลของคนอื่นเอา ที่สำคัญที่สุด ไม่ต้องต่อวงจร Hardware ใหม่ทุกครั้งที่มีไอเดียใหม่ เอาไว้หากทุกอย่างลงตัว ทำงานได้จริง ถึงจะมีการสร้าง Hardware กัน

ปกติแล้วเพื่อน ๆ ผมจะใช้ MATLAB ในการเขียนโปรแกรมเพื่อทดสอบไอเดียก่อน หากใช้ได้จึงค่อยเขียนเป็น FORTRAN77 อีกที ส่วนผมใช้ Python + f2py (Fortran 95) เพราะไม่อยากเขียนสองรอบ (แต่แปลกดีที่ทำงานกันได้) แต่คราวนี้ บริษัทที่ให้งบวิจัยมาต้องการโปรแกรมเป็นภาษา C++ เพราะต้องทำงานร่วมกับหน่วยงานวิจัยของมหาวิทยาลัยอื่น ๆ ด้วย แต่ไม่ได้บอกพวกผมตั้งแต่แรก ว่าอยากได้ C++ สรุปตอนนี้โปรแกรมที่ว่ามีให้เลือกใช้สี่ภาษาคือ MATLAB, Python, Fortran, C++ (มันส์มากครับ ขอบอก)

ทีแรกผมคิดว่าโปรแกรมที่เขียนด้วย C++ กับ Fortran จะมีความเร็วไม่หนีกันมากนัก เพราะเป็นภาษาที่ต้องคอมไพล์ทั้งคู่ แต่ ...

เขียนโปรแกรม เขียนโปรแกรม

01 Dec 07 | by bow_der_kleine | tags เขียนโปรแกรม C C++ Fortran Scientific-Programming

read 5540 comments 9 read more

นักเรียน นักศึกษา (คอมพิวเตอร์) ไทยผู้ไร้อนาคต

imageจั่วหัวเสียน่ากลัวอีกแล้ว อย่าเพิ่งตกใจไปครับ ผมไม่ได้ต้องการบอกว่าเรียนจบด้านนี้มาแล้วไม่มีงานทำ (แต่ตรงกันข้าม ผมคิดว่าตลาดงานยังต้องการคนอีกมากมาย) หรือว่า นักเรียน นักศึกษาด้านนี้ส่วนใหญ่เป็นพวกไร้อนาคต แต่ว่าผมจะเขียนถึงนักเรียนนักศึกษาไทยส่วนหนึ่ง ที่ผมดู ๆ พฤติกรรมแล้ว ก็แอบคิดไม่ได้ว่า "จะไปรอดหรือเนี่ย ?"

แรงบันดาลใจที่ทำให้ผมเขียนเรื่องนี้คือ ผมไปอ่านเจอคำถามตามเวบบอร์ทหลาย ๆ ที่ตามประสา และเจอคำถามของคนที่มาโพสต์ประมาณว่า "ช่วยเขียนโปรแกรมให้หน่อยนะคะ พรุ่งนี้จะส่งแล้ว" (ข้อสังเกตุ : ไม่รู้ว่าคนโพสต์จะเป็นผู้หญิงผู้ชาย แต่ต้องทำตัวเป็นผู้หญิงขี้อ้อนไว้ก่อน จะได้น่าสงสาร)

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

โจทย์ที่ผมเจอบ่อย ๆ คือ " หาค่าเฉลี่ยและโปรแกรมหาค่ามัธยฐาน", "หาค่า (x**2 + 2*x + 3)/(x**3 + 4*x -2 ) ด้วยภาษา C", "นับจำนวนของเลข 5 ใน Matrix ต่อไปนี้" ที่เจอบ่อย ๆ ก็เพราะว่า ถามกันซ้ำครับ มีคนถามไปแล้วคนนึง แล้วก็มีคนตอบแล้วด้วย แต่น้องก็ไม่ดูเลย ยังจะถามใหม่อีกรอบ คือ นอกจากจะเขียนโปรแกรมไม่เป็นแล้ว ยังไม่รู้จักสังเกตอะไรเลย ซึ่งโจทย์เหล่านี้ ใช้ความรู้ด้านการเขียนโปรแกรมน้อยมากครับ แค่รู้ Syntax บางอย่าง คอมไพล์เป็น ก็น่าจะทำได้แล้ว

แต่ปัญหาไม่ได้อยู่ตรงนั้นครับ แค่อ่านกระทู้แวบเดียว ผมก็รู้แล้วว่า ...

ไอที ไอที

03 Oct 07 | by bow_der_kleine | tags ไอที นานาสารพัน เขียนโปรแกรม การศึกษาไทย

read 3794 comments 13 read more

Numerical Programming

imageหลังจากห่างหายจากการเขียนบล็อกไปนานพอสมควร เนื่องจากอาทิตย์ที่ผ่านมา ผมได้ไปเปิดหูเปิดตา ในโลกไฟเบอร์ออพติก (การส่งสัญาณผ่านใยแก้นำแสง) ด้วยการไปประชุม ECOC07 ที่เบอร์ลินมา เป็นงานประชุมวิชาการระดับโลกครั้งแรกในชีวิต ได้เจอนักวิจัยที่ผมเคยอ่านผลงานของเขาหลาย ๆ คน ชนิดแบบตัวเป็น ๆ แต่ก็ไม่ได้คุยอะไรมาก เนื่องจากความอ่อนแอทางด้านภาษาอังกฤษ และได้แลกเปลี่ยนความคิดเห็น กับคนที่ทำหัวข้อใกล้ ๆ กัน ผมไม่รู้จะดีใจ หรือเสียใจดี ที่เรื่องที่ผมทำอยู่ มีคนสนใจน้อย ดีใจที่จะได้ไม่ซ้ำใครมาก เสียใจที่พอมีปัญหาก็ไม่รู้จะถามใครดี แล้ววันหลังจะเขียนเรื่องราวเกี่ยวกับไฟเบอร์ออพติกให้อ่านกันครับ แต่วันนี้ผมขอเอาประสบการณ์การเขียนโปรแกรม ที่ได้จากการทำงานมาเล่าให้อ่านกันก่อน

เรื่องที่ผมจะเขียนถึงคือ Numerical Programming จากเท่าที่ได้ลอง ๆ ค้นข้อมูล ยังไม่ค่อยมีคนเขียนถึงเท่าไร ผมไม่รู้ว่าการเขียนโปรแกรมเชิง Numerical จะจัดเป็น Arithmetic แบบนึง เช่นเดียวกับ Procedure, Modular, OOP หรือ Functional ได้หรือไม่ แต่หลังจากที่ใช้ Numpy และ MATLAB มาเป็นเวลาเกือบสองปี (ส่วนมากจะใช้ Numpy ) ผมก็เริ่มรู้สึกว่า การเขียนโปรแกรมแบบ Numerical นั้น ต้องคิดต่างจาก Arithmetic อื่น ๆ พอสมควร ตอนเขียนแรก ๆ อาจจะคิดว่าคล้าย ๆ Procedure แต่พอเขียนไปนาน ๆ จะรู้ว่าต่างกันค่อนข้างมาก

ก่อนอื่น ผมต้องอธิบายก่อนว่า Numerical Arithmetic ในความเข้าใจของผมคืออะไร ...

เขียนโปรแกรม เขียนโปรแกรม

24 Sep 07 | by bow_der_kleine | tags เขียนโปรแกรม Numeric Arithmetic Python Numpy MATLAB FORTRAN

read 3579 comments 5 read more

เรื่องยุ่ง ๆ เมื่อวิศวกร (ไฟฟ้า) ต้องเขียนโปรแกรม

imageจากที่คุยกับคนที่ทำงานเกี่ยวกับคอมพิวเตอร ก็พบว่าหลาย ๆ คนมีปัญหาในการที่ต้องตกอยู่ในสถาณการณ์บีบบังคับ ให้ต้องใช้เทคโนโลยีที่ไม่เหมาะสมในการทำงาน อย่างเพื่อนของผมคนหนึ่งเล่าให้ฟังว่า เมื่อปีที่แล้วต้องเขียนโปรแกรมด้วย Java 1.1 ให้ทำงานร่วมกับกับ MySQL 3 ตอนทำงานก็เกิดอาการหัวเสียมาก ๆ เพราะรู้ว่างานสามารถเดินเร็วกว่านี้ คุณภาพงานที่ได้ ดีกว่านี้ หากเปลี่ยนไปใช้ อย่างน้อย ๆ ก็ Java 1.4 กับ MySQL 4 ก็ยังดี แม้ว่าต้องแลกด้วยการนั่งแก้โค้ดบางส่วน และทดสอบโปรแกรมใหม่ทั้งหมดก็ตาม แต่เนื่องจากคนที่ให้เงินมีอาการผวา กลัวว่าจะนำข้อมูลเก่ามาใช้ไม่ได้อีก (ทั้งที่ข้อมูลทั้งหมดอยู่ใน MySQL แล้วมัน Inport, Export ได้แบบง่าย ๆ ก็ตามที) เพื่อนผมเลยต้องทำไปตามมีตามเกิดจนงานเสร็จ

ผมเองก็มีประสบการณ์ทำนองนี้เหมือนกัน แถมเป็นประสบการณ์แบบ JIT (Just in time) อีกต่างหาก คือว่าถึงตอนนี้ผมก็ยังหาทางออกของปัญหาไม่ได้เลย

เรื่องของเรื่องมันมีอยู่ว่า คณะที่ผมทำวิจัยอยู่นั้น ผมและเพื่อนร่วมงานต้องเขียนโปรแกรม เพื่อจำลองการส่งสัญญาณผ่านเคเบิลใยแก้วนำแสง ซึ่งต้องใช้พลังการคำนวนมหาศาล (อันนี้เล่าให้ฟังหลายครั้งแล้ว) เลยต้องเอาคอมพิวเตอร์ 32 เครื่องมาต่อ ๆ กัน ทำงานแบบ Cluster ผ่าน PVM ซึ่ง Cluster ชุดนี้ถูกติดตั้งเมื่อสักประมาณ สี่ หรือ ห้าปีที่แล้ว และเมื่อปีกว่า ๆ ที่แล้ว ผมและเพื่อนอีกสองคน ได้เข้ามาทำงานวิทยานิพนธ์ที่นี่ และต้องเขียนโปรแกรมบน Cluster ชุดนี้ด้วย FORTRAN แล้วเรื่องยุ่ง ๆ ก็เริ่มขึ้น ...

ไอที ไอที

01 Sep 07 | by bow_der_kleine | tags ไอที เขียนโปรแกรม FORTRAN 77 FORTRAN 90 Python g77 gfortran Cluster

read 2265 comments 9 read more

Search

Navigation

รวมลิงก์น่าสนใจ

ความเคลื่อนไหว

Login

name password

ลืมรหัสผ่าน