ภาษาโปรแกรมมิ่งไพธอน (Python programming language)

ทำรายงานเรื่องไพธอน แล้วก็ส่งไปแล้ว เลยคิดว่าถ้าทำแล้วแค่ส่งให้อาจารย์แล้วก็กองไว้ตรงนั้น มันจะมีประโยชน์อะไร เอามาเผยแพร่น่าจะได้ประโยชน์กว่าเยอะเลย ;)


ข้อมูลเบื้องต้น

ไพธอน (Python) เป็นภาษาโปรแกรมในลักษณะภาษาอินเตอร์พรีเตอร์โปรแกรมมิ่ง (Interpreted programming language) ผู้คิดค้นคือ Guido van Rossum ในปี 1990 ซึ่งไพธอนเป็น การจัดการชนิดของตัวแปรแบบแปรผันตามข้อมูลที่บรรจุอยู่ (Fully dynamically typed) และใช้การจัดการหน่วยความจำเป็นอัตโนมัติ (Automatic memory management) โดยได้เป็นการพัฒนาและผสมผสานของภาษาอื่น ๆ ได้แก่ ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl และภาษาไพธอนยังเป็นแนวคิดที่ทำให้เกิดภาษาใหม่ ๆ ซึ่งได้แก่ Ruby และ Boo เป็นต้น

ไพธอนนั้นพัฒนาเป็นโครงการ Open source โดยมีการจัดการแบบไม่หวังผลกำไรโดย Python Software Foundation และสามารถหาข้อมูลและตัวแปรภาษาได้จากเว็บไซต์ของไพธอนเอง ที่ http://www.python.org/ ซึ่งในปัจจุบัน (ณ.วันที่ 29 มิถุนายน 2006) Python ได้พัฒนาถึงรุ่นที่ 2.4.3 (ออกวันที่ 29 มีนาคม 2006) และรุ่นทดสอบการทำงาน หรือ beta นั้นอยู่ที่รุ่น 2.5 ซึ่งออกเมื่อ 20 มิถุนายน 2006


ประวัติ

Python 1.0

ไพธอนสร้างขึ้นครั้งแรกในปี 1990 โดย Guido van Rossum ที่ CWI (National Research Institute for Mathematics and Computer Science) ในประเทศเนเธอร์แลนด์ โดยได้นำความสำเร็จของภาษาโปรแกรมมิ่งที่ชื่อ ABC มาปรับใช้กับ Modula-3, Icon, C, Perl, Lisp, Smalltalk และ Tcl โดย Duido van Rossim ถือว่าเป็นผู้ริเริ่มและคิดค้น แต่เค้าก็ยังคิดว่าผลงานอย่างไพธอนนั้น เป็นผลงานความรู้ที่ทำขึ้นเพื่อความสนุกสนานโดยได้อ้างอิงงานชิ้นนี้ของเขาว่าเป็น Benevolent Dictator for Life (BDFL) ซึ่งผลงานที่ถูกเรียกว่าเกิดจากความสนุกสนานเหล่านี้นั้นมักถูกเรียกว่า BDFL เพราะมักเกิดจากความไม่ตั้งใจ และความอยากที่จะทำอะไรที่เป็นอิสระนั้นเอง ซึ่งคนที่ถูกกล่าวถึงว่าทำในลักษณะแบบนี้ก็ได้แก่ Linus Torvalds ผู้สร้าง Linux kernel, Larry Wall ผู้สร้าง Perl programming language และคนอื่น ๆ อีกมากมาย

โดยที่ในไพธอน 1.2 นั้นได้ถูกปล่อยออกมาในปี 1995 โดย Guido ได้กลับมาพัฒนาไพธอนต่อที่ Corporation for National Research Initiatives (CNRI) ที่ เรสตัน, มลรัฐเวอร์จิเนีย ประเทศสหรัฐอเมริกา โดยที่ในขณะเดียวกันก็ได้ปล่อยรุ่นใหม่ ในหมายเลขรุ่น 1.6 ออกมาโดยอยู่ที่ CNRI เช่นกัน

ซึ่งหลังจากปล่อยรุ่น 1.6 ออกมาแล้ว Guido van Rossum ก็ได้ออกจาก CNRI  เพื่อทำงานให้การทำธุรกิจพัฒนาซอฟต์แวร์แบบเต็มตัว โดยก่อนที่จะเริ่มทำงานธุรกิจ เขาก็ได้ทำให้ไพธอนนั้นอยู่บนสัญญาลิขสิทธิ์แบบ General Public License (GPL) โดยที่ CNRI และ Free Software Foundation (FSF) ได้รวมกันเปิดเผยรหัสโปรแกรมทั้งหมด เพื่อให้ไพธอนนั้นได้ชื่อว่าเป็นซอฟต์แวร์เสรี และเพื่อให้ตรงตามข้้อกำหนดของ GPL-compatible ด้วย (แต่ยังคงไม่สมบูรณ์เพราะการพัฒนาในรุ่น 1.6 นั้นออกมาก่อนที่จะใช้สัญญาลิขสิทธิ์แบบ GPL ทำให้ยังมีบางส่วนที่ยังเปิดเผยไม่ได้)

และในปีเดียวกันนั้นเอง Guido van Russom ก็ได้รับรางวัลจาก FSF ในชื่อว่า “Advancement of Free Software”

โดยในปีนั้นเองไพธอน 1.6.1 ก็ได้ออกมาเพื่อแก้ปัญหาข้อผิดพลาดของตัวซอฟต์แวร์และให้เป็นไปตามข้อกำหนดของ GPL-compatible license อย่างสมบูรณ

Python 2.0

ในปี 2000 Guido และ Python Core Development team ได้ย้ายการทำงานไป BeOpen.com โดยที่พวกเขาได้ย้ายจาก BeOpen PythonLabs team โดยในไพธอนรุ่นที่ 2.0 นั้นได้ถูกนำออกเผยแพร่ต่อบุคคลทั่วไปจากเว็บไซต์ BeOpen.com และหลังจากที่ไพธอนออกรุ่นที่ 2.0 ที่ BeOpen.com แล้ว Guido และนักพัฒนาคนอื่น ๆ ในทีม PythonLabs ก็ได้เข้ารวมกับทีมงาน Digital Creations

ไพธอนรุ่น 2.1 ได้สืบทอนการทำงานและพัฒนามาจาก 1.6.1 มากกว่าไพธอนรุ่น 2.0 และได้ทำการเปลี่ยนชื่อสัญญาลิขสิทธิ์ใหม่เป็น Python Software Foundation License โดยที่ในไพธอนรุ่น 2.1 alpha นั้นก็ได้เริ่มชื่อสัญญาสิขสิทธิ์นี้และผู้เป็นเจ้าของคือ Python Software Foundation (PSF) โดยที่เป็นองค์กรที่ไม่หวังผลกำไรเช่นเดียวกับ Apache Software Foundation

อนาคต

ผู้พัฒนาไพธอนมีการประชุมและถกเถียงกันในเรื่องของความสามารถใหม่ ๆ ในไพธอนรุ่นที่ 3.0 โดยมีชื่อโครงการว่า Python 3000 (Py3K) โดยที่จะหยุดการสนับสนุนโค้ดโปรแกรมจากรุ่น 2.x โดยที่ทำแบบนี้เพื่อทำการปรับปรุงเปลี่ยนแปลงการทำงานของภาษาให้ดียิ่งขึ้นตามคำแนะนำที่ว่า “reduce feature duplication by removing old ways of doing things” (ลดทอนคุณสมบัติที่ซ้ำซ้อนด้วยการยกเลิกเส้นทางที่เดินผ่านมาแล้ว) โดยในตอนนนี้ยังไม่มีตารางงานของไพธอน รุ่น 3.0 แต่อย่างใด แต่ Python Enhancement Proposal (PEP) ได้มีการวางแผนไว้แล้ว โดยได้วางแผนไว้ดังนี้

  • ทำการเพื่อส่วนสนับสนุนชนิดตัวแปรให้มากขึ้น
  • สนับสนุนการทำงานของชนิดตัวแปรแบบ unicode/str และ separate mutable bytes type
  • ยกเลิกการสนับสนุนคุณสมบัติของ classic class, classic division, string exceptions และ implicit relative imports
  • ฯลฯ

หลักปรัชญาของภาษาไพธอน

ไพธอนเป็นภาษาที่สามารถสร้างงานได้หลากหลายกระบวนทัศน์ (Multi-paradigm language) โดยจะมองอะไรที่มากกว่าการ coding เพื่อนำมาใช้งานตามรูปแบบเดิม ๆ แต่จะเป็นการนำเอาหลักการของกระบวนทัศน์ (Paradigm) แบบ Object-oriented programming, Structured programming, Functional programming และ Aspect-oriented programming นำเอามาใช้ทั้งแบบเดียว ๆ และนำมาใช้ร่วมกัน ซึ่งไพธอนนั้นเป็น ภาษาที่มีการตรวจสอบชนิดตัวแปรแบบยืดหยุ่น (dynamically type-checked) และใช้ Garbage collection ในการจัดการหน่วยความจำ


ข้อเด่นของภาษาไพธอน

  • ง่ายต่อการเรียนรู้ โดยภาษาไพธอนมีโครงสร้างของภาษาไม่ซับซ้อนเข้าใจง่าย ซึ่งโครงสร้างภาษาไพธอนจะคล้ายกับภาษาซีมาก เพราะภาษาไพธอน สร้างขึ้นมาโดยใช้ภาษาซี ทำให้ผู้ที่คุ้นเคยภาษาซี อยู่แล้วใช้งานภาษาไพธอนได้ไม่ยาก นอกจากนี้โดยตัวภาษาเองมีความยืดหยุ่นสูงทำให้การจัดการกับงานด้านข้อความ และ Text File ได้เป็นอย่างดี
  • ไม่ต้องเสียค่าใช้จ่ายใดๆ ทั้งสิ้น เพราะตัวแปรภาษาไพธอนอยู่ภายใต้ลิขสิทธิ์ Python Software Foundation License (PSFL) ซึ่งเป็นของ Python Software Foundation (PSF) ซึ่งมีลักษณะคล้ายกับ ลิขสิทธิ์แม่แบบอย่าง General Public License (GPL) ของ Free Software Foundation (FSF)
  • ใช้ได้หลายแพลตฟอร์ม ในช่วงแรกภาษาไพธอนถูกออกแบบใช้งานกับระบบ Unix อยู่ก็จริง แต่ในปัจจุบันได้มีการพัฒนาตัวแปลภาษาไพธอน ให้สามารถใช้กับระบบปฏิบัติการอื่นๆ อาทิเช่น Linux Platform, Windows Platform, OS/2, Amiga, Mac OS X และรวมไปถึงระบบปฎิบัติการทีี่ .NET Framework, Java virtual machine ทำงานได้ ซึ่งใน Nokia Series 60 ก็สามารถทำงานได้เช่นกัน
  • ภาษาไพธอนถูกสร้างขึ้นโดยได้รวบรวมเอาส่วนดีของภาษาต่างๆ เข้ามาไว้ด้วยกัน อาทิเช่น ภาษา ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl
  • ไพธอนสามารถรวมการพัฒนาของระบบเข้ากับ COM, .NETและ CORBA objects
  • สำหรับ Java libraries แล้วสามารถใช้ Jython เพื่อทำการพัฒนาซอฟต์แวร์จากภาษาไพธอนสำหรับ Java Virtual Machine
  • สำหรับ .NET Platform แล้ว สามารถใช้ IronPython ซึ่งเป็นการพัฒนาของ Microsoft เพื่อจะทำให้ไพธอนนั้นสามารถทำงานได้บน .Net Framework ซึ่งใช้ชื่อว่า Python for .NET
  • ไพธอนนั้นสนับสนุน Internet Communications Engine (ICE) และการรวมกันของเทคโนโลยีอื่น ๆ อีกมากมายในอนาคต
  • บางครั้งนักพัฒนาอาจจะพบว่าไพธอนไม่สามารถทำงานบางอย่างได้ แต่นักพัฒนาต้องการให้มันทำงานได้ ก็สามารถพัฒนาเพิ่มได้ในรูปแบบของ extension modules ซึ่งอยู่ในรูปแบบของโค้ด C หรือ C++ หรือใช้ SWIG หรือ Broost.Python
  • ภาษาไพธอนเป็นสามารถพัฒนาเป็นภาษาประเภท Server side Script คือการทำงานของภาษาไพธอนจะทำงานด้านฝั่ง Server แล้วส่งผลลัพธ์กลับมายัง Client ทำให้มีความปลอดภัยสูง และยังใช้ภาษาไพธอนนำมาพัฒนาเว็บเซอร์วิสได้อีกด้วย
  • ใช้พัฒนาระบบบริหารการสร้างเว็บไซต์สำเร็จรูปที่เรียกว่า Content Management Systems (CMS) ซึ่ง CMS ที่มีชื่อเสียงมาก และเบื้องหลังทำงานด้วยไพธอนคือ Plone http://www.plone.org/

Category และ Application Domains

ภาษาไพธอนนั้น จัดอยู่ใน Category ภาษาที่สามารถสร้างงานได้หลากหลายกระบวนทัศน์ (Multi-paradigm language) โดยรองรับทั้ง Object-oriented programming, Imperative, Functional programming และ Logic programming ซึ่งไพธอนสามารถนำไปพัฒนาซอฟต์แวร์ประยุกต์ได้มากมาย ได้แก่

Web และ Internet Development

ไพธอนนั้นมีการสนับสนุนในด้า้นของ Web Development ในโซลูชันระดับสูงด้วย Zope, mega frameworks อย่าง Django และ TurboGears และรวมไปถึง Content Management Systems ขั้นสูงอย่าง Plone และ CPS จึงทำให้ไพธอนนั้นเป็น Common Gateway Interface (CGI) ระดับสูงที่มีประสิทธิภาพที่ดีที่สุดตัวหนึ่งในตลาด

Database Access

ไพธอนนั้นสนับสนุนการเข้าถึงข้อมูลในฐานข้อมูลของผู้ผลิตฐานข้อมูลต่าง ๆ มากมาย โดยผ่านทาง ODBC Interfaces และ Database Connection Interface อื่น ๆ ซึ่งสามารถทำงานร่วมกับ  MySQL, Oracle, MS SQL Server, PostgreSQL, SybODBC และอื่น ๆ ที่จะมีมาเพิ่มเติมอีกในอนาคต

Desktop GUIs

เมื่อไพธอนได้ติดตั้งลงบนเครื่องของคุณแล้ว จะมี Tk GUI development library ซึ่งเป็น libraries ที่มีความสามารถเทียบเท่า Microsoft Foundation Classes (MFC, ซึ่งคล้าย ๆ กับ win32 extensions), wxWidgets, GTK, Qt, Delphi และอื่น ๆ ทำให้สามารถพัฒนาซอฟต์แวร์ประยุกต์ต่าง ๆ แบบ Graphic user interface ได้

Scientific และ Numeric computation

ไพธอนรองรับการทำงานของนักวิทยาศาสตร์ในเรื่องของทฤษฎีการคำนวณ, Bioinformatics และ Physics เป็นต้น

Education

ไพธอนนั้นเป็นภาษาที่เหมาะกับการเรียนการสอนในวิชา programming อย่างมาก โดยสามารถนำไปใช้ในระดับเบื้องต้นถึงระดับสูง ซึ่ง Python Software Foundation นั้นได้มีหลักสูตรสำหรับการเรียนการสอนในด้านนี้อยู่แล้ว ซึ่งสามารถนำเอา pyBiblio  และ Software Carpentry Course มาเรียนเพื่อเสริมความรู้ได้

Network programming

เป็นการเพิ่มความามารถจาก Web และ Internet Development ไพธอนนั้นสนับสนุนในการเขียนโปรแกรมในระดับต่ำในด้านของ network programming ที่ง่ายต่อการพัฒนา sockets และ รวมไปถึงการทำงานร่วมกับ mudules อย่าง Twisted และ Framework สำหรับ Asyncronous network programming

Software build และ Testing

ไพธอนนั้นสนับสนุนการพัฒนาซอฟต์แวร์ที่มีการควบคุมการพัฒนาและจัดการระบบทดสอบต่าง ๆ โดยใช้เครื่องมือในการพัฒนาที่สนับสนุนการเขียนโปรแกรมในไพธอนเอง ซึ่งตัวไพธอนนั้นได้มาพร้อมกับ

  •   Scons สำหรับ build โปรแกรม
  •   Buildbot และ Apache Gump ที่ใช้สำหรับงาน Automated continuous compilation และ Testing
  •   Roundup หรือ Trac สำหรับ bug tracking และ project management

Game และ 3D Graphics Rendering

ไพธอนนั้นได้ถูกใช้ในตลาดพัฒนาเกมส์ทั้งเชิงธุรกิจและสมัครเล่น โดยมีการสร้าง Framework สำหรับพัฒนา Game บนไพธอนซึ่งชื่อว่า PyGame และ PyKyra ซึ่งยังรวมไปถึงการทำ 3D Graphics Rendering ที่ไพธอนมี libraries ทางด้านงานนี้อยู่มากมาย


ซอฟต์แวร์ที่เขียนด้วยไพธอน

  • BitTorrent เป็นการพัฒนาโดยระบบการจัดการไฟล์ BitTorrent, การจัดการ การกระจายตัวของ Package ข้อมูลใน Tracker และการเข้ารหัสส่วนข้อมูลต่าง ๆ
  • Blender ซอฟต์แวร์ open source สำหรับทำ 3D modeling
  • Chandler ซอฟต์แวร์จัดการข้อมูลส่วนบุคคล (Personal Information Manager, PIM) โดยมีส่วนเพิ่มเติมทั้งงานปฎิทิน, อีเมล, ตารางงาน และข้อมูลโน็ตต่าง ๆ ซึ่งทำงานคล้าย ๆ กับ Outlook ของ Microsoft
  • Civilization IV วีดิโอเกมส์ และยังเป็นเกมส์ที่ใช้ boost.python เพื่อทำการควบคุมส่วนประกอบต่าง ๆ ภายในเกมส์ ซึ่งรวมไปถึงรูปแบบ, หน้าตา และเนื้อหาของเกมส์ด้วย
  • Mailman หนึ่งในซอฟต์แวร์ E-Mail mailing lists ที่ได้รับความนิยมสูงสุด
  • Kombilo ระบบจัดการฐานข้อมูลของเกมส์โกะ
  • MoinMoin ระบบ Wiki ที่ได้รับความนิยมสูงตัวหนึ่ง
  • OpenRPG ระบบเกมส์เสมือนแบบ Role Playing Games ลน Internet
  • Plone ระบบ Content Management System
  • Trac ระบบติดตามติดตามข้อผิดพลาดและจัดการข้อมูลด้านการพัฒนาซอฟต์แวร์ด้วย MoinMoin ที่เป็น wiki และ Subversion เพื่อทำระบบ Source version control
  • Turbogears ระบบพัฒนาซอฟต์แวร์ Framework โดยรวมเอา Cherrypy, SQLObject, MochiKit และ KID templates
  • ViewVC ระบบ Web-based สำหรับจัดการด้าน CVS และ SVN repositories
  • Zope ระบบพัฒนาซอฟต์แวร์บนอินเทอร์เน็ตแบบ web-application platform
  • Battlefield 2 เกมส์ First Person Shooter ที่ได้ใช้ไพธอนในการทำ Configuration scripts
  • Indian Ocean Tsunami Detector ซอฟต์แวร์สำหรับมือถือเพื่อแจ้งเตือน Tsunami
  • EVE Online เกมส์แบบ Multi Massive Online Role Playing Game ซึ่งเป็นเกมส์ที่ได้รับอันดับสูงมากบน MMORPG.com
  • SPE – Stani’s Python Editor เป็น Free และ open-source สำหรับงานพัฒนาซอฟต์แวร์ด้วยไพธอน โดยมีทั้งแบบ Python IDE for Windows, Linux \& Mac with wxGlade (GUI designer), PyChecker (Code Doctor) และ Blender (3D)

ตัวอย่างความสำเร็จของไพธอน

Industrial Light & Magic

  • “ไพธอนเป็นกุญแจสำหรับการสร้างผลงานที่ดี ถ้าไม่มีมันแล้วงานอย่าง Star Wars: Episode II ก็เป็นเรื่องที่ยากมากที่จะสำเร็จ ด้วยวิธีการ  crowd rendering เพื่อส่งไปทำการ batch processing ในการ compositing video นั้นเป็นเรื่องที่ง่ายไปเลยเมื่อใช้การพัฒนาระบบด้วยไพธอน”  Tommy Burnette, Senior Technical Director, Industrial Light & Magic
  • “ไพธอนอยู่ทุก ๆ ที่ใน ILM มันช่วยให้เราสามารถที่จะทำงานกับภาพกราฟฟิกที่ถูกสร้างสรรค์ได้ง่ายและรวดเร็ว” Philip Peterson, Principal Engineer, Research & Development, Industrial Light & Magic

Google

  • “ไพธอนมีความสำคัญต่อ Google มาก เพราะตั้งแต่เริ่มมี Google เราก็ใช้มันสร้างระบบของเรา และยังคงเป็นส่วนสำคัญจนทุกวันนี้ โดยในทุก ๆ วันเหล่าวิศวะกรของ Google ใช้ไพธอนในการทำงานอยู่ตลอดเวลา เพื่อค้นหาข้อมูลบนโลกของอินเทอร์เน็ตอย่างไม่มีทีสิ้นสุด” Peter Norvig, Director of Search Quality, Google, Inc.

NASA

  • NASA ใช้ไพธอนในการพัฒนา การจัดการ Model, Integration และ ระบบ Transformation ในงาน CAD/CAE/PDM โดยพวกเราเลือกไพธอนเพราะมีความสามารถในการสร้างงานให้ออกมาได้อย่างรวดเร็วและมีประสิทธิภาพสูง โดยสิ่งที่สำคัญคือ code ในการเขียนนั้นสะอาดและง่ายต่อการจัดการดูแลในภายหลัง อีกทั้งยังมี libraries ให้ใช้อย่างมากมายทำการ Integration ของระบบนั้นเป็นไปอย่างชาญฉลาดและรวดเร็วแถมยังทำระบบที่สามารถเชื่อมต่อการกับระบบอื่น ๆ ได้อย่างดี ซึ่งไพธอนนั้นตอบโจทย์ของเราได้ทั้งหมด”  Steve Waterbury, Software Group Leader, NASA STEP Testbed

Language Evaluation Criteria

ด้วยความที่ไพธอนนั้นผสมผสานการสร้างภาษาที่สวยงาม ทำให้การอ่านหรือเข้าใจโค้ด (Readability) ต่าง ๆ นั้นทำได้ง่าย รวมถึงการเขียนโค้ด (Writability) ที่กระชับและสั้นในการเขียน รวมถึงมีประสิทธิภาพ ทำให้มีเสถียรภาพ (Reliability) สูงขึ้นและมีความรวดเร็วในการทำงานอีกด้วย และในด้านค่าใช้จ่าย (Cost) ในการพัฒนาซอฟต์แวรจากไพธอนนั้นในประเทศไทยนั้นยังต้องใช้ค่าใช้จ่ายค่อนข้างสูง เพื่อให้ได้มาซึ่งซอฟต์แวร์ที่ดี เพราะผู้เชี่ยวชาญที่เขียนไพธอนได้มีเสถียรภาพนั้นยังมีน้อย ทำให้ค่าตัวสำหรับผู้พัฒนานั้นสูงตามไปด้วย ถึงแม้ว่าเครื่องมือในการพัฒนานั้นจะฟรี และเป็น Open source ก็ตาม แต่ค่าใช้จ่ายในด้านบุคลากรนั้นมีมากกว่าค่าเครื่องมือพัฒนา


ข้อมูลอ้างอิง

คำสั่งการใช้งานต่าง ๆ ของ Python สามารถอ่านได้จาก Python Programming Language Documentation ที่ http://docs.python.org

o3 หนังสือแนว Open Source Enterprise Data Networking Magazine

พอดีว่านั่งหาข้อมูลทำรายงานไปเรื่อย ๆ ดันไปเจอของดีเข้า คือ o3 Magazine ( http://www.o3magazine.com/ ) ครับ ซึ่งตอนนี้ถึงเล่มที่ 4 แล้ว ลองโหลดเล่มเก่า ๆ และเล่มใหม่ล่าสุดมาอ่านดูนะ ความรู้แน่นมาก แถมฟรี ด้วย ;)

ซื้อ Hard Drive ใหม่เสียที หลังจากอึดอัดมานาน

ด้วยเหตุที่ว่า Notebook ผมนั้นมันมีพื้นที่ใช้ส่อยแค่ 40GB และถูกลดลงด้วยหลักเลขฐานสองลงไปอีก (อ่านดูแล้วกัน : พื้นที่ในฮาร์ดดิสค์หายไปไหน ?? มันคือพื้นที่ผีอยู่ หรือว่ามันหายไปจริงๆ !!! ) ซึ่งมันจะเหลือให้ใช้จริงๆ อยู่ประมาณ 38.xx GB เท่านั้น ทำให้อึดอัดมาก แค่ลง Operating System และ Software ต่าง ๆ ก็ใช้พื้นที่ไปแล้วกว่า 16 – 18GB ซึ่งนี้ยังไม่รวมไฟล์เอกสารที่มากมาย ที่ซัดไปเหลือให้ได้ว่าง ๆ เอาไว้วิ่งเล่น และ Defragmemt อีกนิดหน่อย ซึ่งน้อยมาก ๆ จนต้องไปหาซื้อ Hard Drive ใหม่สักที ด้วยราคาที่ถูกลงมากสำหรับความจุ 80GB ทำให้ผมไปคว้ามาซะเลยในราคาค่าตัว 4,000 ถ้วน (ราคาต่างจังหวัดนะ) ซึ่งแพงกว่าแถวกรุงเทพฯ ตามห้างดังต่าง ๆ อยู่ไม่น่าเกิน 300 บาท (คิดซะว่าค่ารถไปกลับยังไม่ถึงเลย ถือว่า ok แล้วกัน) โดยที่ซื้อคือ Seagate® Momentus 5400.3 ST980815A 5,400rpm 80GB ซึ่งเอามาแทนที่ Hitachi® Travelstar HTS424040M9AT00 4,200rpm 40GB ที่ติดมากับ IBM Thinkpad R40 ตัวเก่งของผม ซึ่งการเปลี่ยนก็ง่าย ๆ แค่ถอดน็อต 1 ตัวแล้วก็เลื่อนมันออกมา ขันน็อตที่ยึดอีก 4 ตัว แล้วก็เปลี่ยนเสร็จก็เอาตัวใหม่ใส่แล้วก็ทำขั้นตอนย้อนกลับก็จบ ง่ายมาก ๆ ไม่ยาก แต่ที่ยากคือการเอาข้อมูลใน Hard Drive ตัวเก่ามาใส่ตัวใหม่ ซึ่งคงต้องอาศัย software อย่าง Norton Ghost มาช่วยเล็กน้อย ตามวิชาที่ได้ร่ำเรียนมาจากสำนักประกอบเครื่องตอน ม. 4-6 ที่โรงเรียนเก่า (ประกอบเครื่องและลงโปรแกรม 250 เครื่องภายใน 5 วัน ก็ใช้ Ghost เนี่ยหล่ะเป็นคำตอบ อิๆๆๆ) ซึ่งก้ใช้เวลาอีก 3 – 4 ชั่วโมงในการย้ายข้อมูล รวมไปถึงการ update MFT (Master File Table) ของ File System ของ Windows อีก ครึ่งชั่วโมง โดยใช้การ chkdsk c:/f เพื่อทำการ update MFT เพราะไม่งั้น windows มันจะเอ้อๆ และช้าๆ เพราะ MFT ใน Hard Drive ตัวเก่า กับ ตัวใหม่นั้นมีการอ้างอิงที่มีการคลาดเคลื่อนกันได้ โดยเฉพาะถ้าขนาด Partition ที่มีไม่เท่ากัน ซึ่งอย่างของผม Drive C ที่เก็บ OS ไว้นั้น ตัวเก่ามีขนาด 20GB แต่ตัวใหม่มีขนาด 30GB ทำให้มีพื้นที่บางส่วนที่ MFT ไม่ครอบคลุมแน่นอน โดยสักเกตุได้ง่ายมากก่อนทำ chkdsk c: เฉยๆ มันจะขึ้น MFT error ซึ่งต้องทำการ fix ในส่วนของ MFT ด้วยคำสั่ง chkdsk c:/f ก่อน แล้วถึงจะหาย error ซึ่งจริง ๆ ต้องทำทุกๆ Drive เลยทีเดียว และคราวนี้ก็สมใจสักที มีพื้นที่โล่งๆ ไว้เก็บงานต่าง ๆ ได้มากขึ้น แถมเพลงอีกด้วย

ส่วนตัวเก่านั้นก็ไปซื้อ External Box 2.5" มาใส่ในราคา 190 บาท (ราคาต่างจังหวัด)

รูปต่าง ๆ ถ่ายด้วย Sony Ericsson W700i ย่อรูปเหลือขนาดที่ ~500 x ~500 Pixel

หลักการเขียนโปรแกรม 50 ข้อ

เห็นว่าน่าสนใจและดีมาก ๆ เลยนำมาลง (ช่วงนี้รู้สึกว่าตูไม่ได้เขียนเองเท่าไหร่เลยนะ -_-")

  1. โปรแกรมแบบพอเพียง (ทำอะไรให้เล็กที่สุดเท่าที่เป็นไปได้)
  2. ทำสิ่งธรรมดาให้ง่าย ทำสิ่งยากให้เป็นไปได้
  3. จงโปรแกรมโดยนึกว่าจะมีคนมาทำต่ออย่างแน่นอน
  4. ระเบียบ กฎข้อบังคับ เชื่อถือไม่ได้ถ้ามีเพียงหนึ่งโมดูลไม่ปฏิบัติตาม
  5. ตัดสินใจให้ดีระหว่างความชัดเจน (Clearance) กับการขยายได้ (Extensibility)
  6. อย่าเชื่อมั่น Output จากโมดูลอื่น ถึงแม้เราจะเป็นคนเขียนเอง
  7. ถ้าคนเขียนยังเข้าใจได้ยาก แล้วคนอ่านจะเข้าใจได้ยากกว่าแค่ไหน
  8. ค้นหาข้อมูลสามวันแล้วทำหนึ่งวัน หรือจะทำสามวันแล้วแก้บั๊กตลอดไป
  9. จงสร้างเครื่องมือ ก่อนทำงาน
  10. อย่าโทษโมดูลอื่นก่อน โดยเฉพาะถ้าโมดูลอื่นเป็น OS และ Compiler
  11. พยายามทำตามกฎ แต่ถ้ามีข้อยกเว้น ต้องมีอย่างหลีกเลี่ยงไม่ได้ ให้ประกาศและตะโกนให้ดังที่สุด
  12. High Cohesion Loose Coupling (ยึดเกาะให้สูงสุดในโมดูล และเกาะเกี่ยวกับโมดูลอื่นให้น้อยที่สุด)
  13. ให้สิ่งที่เกี่ยวข้องกันยิ่งมากอยู่ไกล้กันมากที่สุด
  14. อย่าเชื่อโดยไม่พิสูจน์
  15. อย่าลองทำแล้วคอมไพล์ดู ถ้าเราไม่ได้คาดหวังผลลัพธ์อะไรไว้ (อย่างเช่นปัญหา index off by one)
  16. จงกระจายความรู้เพราะนั่นคือการทำ Unit Test ระดับล่างสุด (ระดับความคิด)
  17. อย่าเอาทุกอย่างใส่ใน UI เพราะ UI คือส่วนที่ Unit Test ได้ยาก
  18. ทั้งโปรเจ็กต์ควรไปในทางเดียวกันมากที่สุด (Consistency)
  19. ถ้ามีสิ่งที่ดีอยู่แล้ว จงใช้มัน อย่าเขียนเอง ถ้าจำเป็นต้องเขียนเอง ให้ศึกษาจากข้อผิดพลาดในอดีตก่อน
  20. อย่ามั่นใจเอาโค้ดไปใช้จนกว่าจะ Test อย่างเพียงพอ
  21. เอาโค้ดที่ Test ไว้ที่เดียวกันกับโค้ดที่ถูก Test เสมอ
  22. ทุกครั้งที่แก้ไขโค้ดให้รัน Unit Test ทุกครั้ง
  23. จงใช้ Unit Test แต่อย่าเชื่อมั่นทุกอย่างใน Unit Test เพราะ Unit Test ก็ผิดได้
  24. ถ้าต้องทำอะไรที่ซ้ำกันมากกว่าหนึ่งครั้ง ก็เพียงพอแล้วที่จะแยกโค้ดส่วนนั้นออก
  25. ทำให้ใช้งานได้ก่อน แล้วค่อย Optimize และถ้าไม่จำเป็น อย่า Optimize
  26. ยิ่งประสิทธิภาพเพิ่ม ความเข้าใจง่ายจะลดลง
  27. ใช้ Design Pattern ที่เป็นที่รู้จักจะได้คุยกับใครได้รู้เรื่อง
  28. อย่าเก็บไว้ทำทีหลัง ถ้ายังไงก็ต้องทำ
  29. Multithreading ไม่ใช่แค่การเพิ่มประสิทธิภาพ แต่มันมาพร้อมกับ Concurrency, Deadlock, Isolation Level, Hard to Debug, Undeterministic Errors
  30. จงทำอย่างโจ่งแจ้ง
  31. อย่าเพิ่มเทคโนโลยีโดยไม่จำเป็น เพราะนั่นทำให้โปรแกรมเมอร์ต้องวุ่นวายมากขึ้น
  32. จงทำโปรเจ็กต์ โดยคิดว่าความเปลี่ยนแปลงเกิดขึ้นได้เสมอ
  33. อย่าย่อชื่อตัวแปรถ้าไม่จำเป็น เดี๋ยวนี้ IDE มันช่วยขึ้นเยอะแล้ว ไม่ต้องพิมพ์เอง แค่ dot มันก็ขึ้นมาให้เลือก
  34. อย่าใช้ i, j, k, result, index, name, param เป็นชื่อตัวแปร
  35. ทำโค้ดที่ต้องสื่อสารผ่านเครือข่ายให้คุยกันน้อยที่สุด
  36. แบ่งแยกดีๆ ระหว่าง Exception Message ในแต่ละเลเยอร์ ว่าต้องการบอกผู้ใช้ หรือ บอกโปรแกรมเมอร์
  37. ที่ระดับ UI ต้องมี Catch All Exceptions เสมอ เพื่อกรอง Exception ที่ลืมดักจับ
  38. ระวังคอลัมน์ Allow Null ใน Database ให้ดี ค่ามัน Convert ไม่ได้
  39. อย่าลืมว่า Database เป็น Global Variable ประเภทหนึ่ง แต่ละโปรแกรมที่ติดต่อเปรียบเหมือน Multithreading ดังนั้นกฎของ Multithreading ต้องกระทำเมื่อทำงานกับ Database
  40. ระวังอย่าให้ logic if then else ซ้อนกันมากๆ เพราะสมองคนไม่ใช่ CPU จินตนาการไม่ออกหรอกว่ามันอยู่ตรงไหนเวลา Debug (ถ้ามากกว่าสามชั้นก็ลองคิดใหม่ดูว่าเขียนแบบอื่นได้มั้ย)
  41. ระวังอย่าให้ลูปซ้อนกันมากๆ ไม่ใช่แค่เรื่องความเร็วอย่างเดียว เวลา Debug เราคิดตามมันไม่ได้ (ถ้าเกินสามชั้นก็ไม่ไหวแล้ว)
  42. อย่าใช้ Magic Number ในโค้ด เช่น if( controlingValue == 4 ) เปลี่ยนไปใช้ Enum ดีกว่า เป็น if( controlingValue == ControllingState.NORMAL ) เข้าใจง่ายกว่ามั้ย
  43. ถ้าจะเปรียบเทียบ String ให้ Trim ซ้ายขวาก่อนเสมอ
  44. คิดหลายๆ ครั้งก่อนใช้ Trigger
  45. โปรแกรมเมอร์คือห่วงโซ่สุดท้ายของมลพิษทางความซับซ้อน ดังนั้นหา Project Leader ดีๆ แล้วกัน
  46. มนุษย์ฉลาดกว่าคอมพิวเตอร์ การเขียนโปรแกรมก็คือการสอนให้คอมพิวเตอร์ฉลาดได้เหมือนเรา (มนุษย์ฉลาดกว่าคอมพิวเตอร์จริงๆ นะ)
  47. จงควบคุมคอม มิใช่ให้คอมควบคุมเรา เราต้องสั่งให้คอมทำงาน ไม่ใช่ให้เราทำงานตามคอมสั่ง
  48. อย่าปล่อยให้ข้อจำกัดของคอม มาจำกัดความคิดของเรา (คอมไม่ดีเปลี่ยนเครื่องเลย :-D)
  49. ยอมรับความคิดของผู้อื่น แต่อย่าออกจากกรอบของตนเอง
  50. หมั่น Save โปรแกรมไว้อย่าสม่ำเสมอ ก่อนที่จะไม่มีโอกาส Save (จะให้ดี Save เป็นแต่ละ Version เลย)


อ้างอิง

ความเป็นไปของยี่ห้อ HardDisk ต่าง ๆ

พอดีว่าอ่านแล้วน่าสนใจมากเลยนำมาบอกต่อครับ

อ้างอิงจาก http://www.pantip.com/tech/coffee/topic/JX1985579/JX1985579.html


ในสมัยก่อน มี HardDisk ยี่ห้อ Seagate,Maxtor,Quantum,IBM,Corner,Wetern Digital และ NEC

ซึ่งต้อนนั้นยี่ห้อ Seagate ขายดีที่สุด และ IBM ขายได้น้อยที่สุด

ในยุคต่อมา Seagate ได้ซื้อกิจการ HardDisk ของ Corner ทำให้ไม่มียี่ห้อ Corner ต่อไปแล้ว

ต่อมา บริษัท LG ได้ควบกิจการ HardDisk ของ Quantum
ทำให้ตอนนั้น HardDisk ของ Quantum มียี่ห้อว่า LG- Quantum

ในปีต่อมา บริษัท LG ได้หยุดควบ HardDisk ของ Quantum ทำให้ HardDisk มียี่ห้อ Quantum เหมือนเดิม

ต่อมา HardDisk ยี่ห้อ NEC ก็ได้เลิกกิจการแผนก HardDisk และเลิกผลิต HardDisk อีกต่อไป เพราะขายไม่ค่อยดี และได้กำไร น้อย

ต่อมามี HardDisk ยี่ห้อใหม่ๆ ออกมา คือ Fujitsu และSamsung
ตอนนั้นยังขายไม่ค่อยออกเท่าไร่

ต่อมา บริษัท HITACHI ได้เข้า TakeOver HardDisk ยี่ห้อ IBM ทำให้ HardDisk ยี่ห้อ IBM ได้เปลี่ยนเป็น ยี่ห้อ HITACHI และ HITACHI เป็นผู้ผลิต HardDisk เพียงแต่ผู้เดียว แต่ยังใช้โรงงานและเทคโนโลยีของ IBM อยู่

ต่อมา HardDisk ยี่ห้อ Samsung ขายดีมากขึ้น เทน้ำเทท่า ทำให้ Samsung ผลิต HardDisk ต่อไป

ต่อมามี HardDisk ยี่ห้อ TOSHIBA ออกมาแต่มักจะทำแบบ Notebook มากกว่าแบบ Desktop PC

ต่อมา HardDisk ยี่ห้อ Fujitsu แบบ Desktop PC ขายไม่ได้ตามเป้า แต่ในขนาดเดียวกันมี Notebook หลายยี่ห้อ ยังใช้ HardDisk ของ Fujitsu อยู่ Fujitsu จึงตัดสินใจยกเลิกผลิต HardDisk แบบ Desktop PC แล้ว แต่ยังคงผลิต HardDisk สำหรับ Notebook ต่อไป

ต่อมา HardDisk ยี่ห้อ Maxtor ได้ควบกิจการกับ Quantum เรียบร้อยแล้ว และให้ Maxtor ผลิต HardDisk สำหรับ Desktop PC และ Notebook และให้ Quantum ผลิต HardDisk สำหรับ Server

ปัจจุบัน HardDisk ยี่ห้อ Seagate ซื้อกิจการ HardDisk ยี่ห้อ Maxtor แต่จะเป็นยังไร เดียวมาเล่าสู่กันฟัง