คอมไพล์เลอ ต้องมังกร & โอเอส ต้องไดโนเสาร์ หนังสือที่อ้างอิงและศึกษาได้ดี

ทำไม !! คอมไพล์เลอ ต้องมังกร และ โอเอส ต้องไดโนเสาร์

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

Operating System Concepts


by Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne


ถือเป็นหนังสือที่เอาไว้ศึกษาหลักการ Operating System ได้ดีมาก ๆ เลยทีเดียว ที่ผมเรียนตอนปี 3 ก็ใช้เล่มนี้สอนเป็นหลัก แต่เนื้อหามันเยอะมาก เลยเรียนไม่หมดเล่ม ด้วยความอยากรู้เลยไปซื้อที่ CU Book ที่ม. ตอนนั้นมี Wiley Asia Sutdent Edition ขายพอดีราคาเลยถูกกว่าเล่มที่วางขายทั่วไปพอสมควร (เล่มในรูปซื้อมาประมาณ 600 – 700 ไม่เกินนี้ จำราคาไม่ได้นานแล้วอ่ะ -_-‘) เอาไว้ศึกษาพวก thead, memory management แล้วก็พวก deadlock ต่าง ๆ จริง ๆ อ่านเล่มนี้ทำให้เราเขียนโปรแกรมให้มีประสิทธิภาพสูงได้เลยหล่ะ ได้แนวคิดเยอะมาก ๆ จริง ๆ คนที่เขียนพวกซอฟต์แวร์ที่ใช้ thead หรือพวก control session ต่าง ๆ สมควรอ่านอย่างยิ่งเลย เล่มที่ได้มานี่ 7th Edition ถือน่าจะใหม่เกือบที่สุดแล้วในตอนนี้ (เห็นใน amazon มี with Java ด้วย อันนี้น่าจะใหม่กว่านิดหน่อย) แต่เนื้อหาหลัก ๆ ถือว่าควบถ้วนครับ ซึ่งเล่มถ้าจะอ่านต้องมีพื้นในด้าน Hardware พอสมควร แนะนำให้เปิดหนังสือเล่มนี้อ่านพร้อม ๆ กับพวกวิชา Introductrory to Computer หรือ Computer Organization and Architecture ไปด้วยจะดีมาก ๆ


Compilers: Principles, Techniques, and Tools


by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman


เล่มนี้ถือว่าหายากมากในไทย แถมเป็นเล่มที่ Classic ของคนเรียน Computer Science (ออกตั้งแต่ปี ค.ศ. 1985-1986) เห็นว่าเดือนนี้ (สิงหาคม 2006) จะออก Edtion ที่สองแล้ว แต่ว่าเล่มนี้นี่ ผมก็ไม่รู้ทำไม ที่มหาวิทยาลัยก็ไม่มี ในหอสมุดก็เพิ่งจะเอามาลงเมื่อปลายปี 2548 นี้เอง จริง ๆ ดูราคาแล้วก็แพงมหาโหดมาก ราคาจาก US -> Thai นี่เกือบ ๆ 4,000 บาทได้ เลยต้องยืมของหอสมุดมาถ่ายเอกสารเอา เพราะว่าหาซื้อไม่ได้ แถมแพงอีก ยิ่งแล้วใหญ่เลย (ถ่ายยังราคาเกือบ ๆ 500 บาทได้) โดยภายในหนังสือสอนแนวคิดก่อน และก่อนจะอ่านเล่มนี้จริง ๆ ต้องมีพื้นหลายอย่างมาก่อนแล้วทั้ง Computationnal Thoery หรือพวก Regular Expression wi POSIX/Perl ไม่งั้น อ่านลำบากมาก เพราะด้านในนี้แทบจะหา code โปรแกรมน้อยมาก ส่วนใหญ่จะออกแนวสัญลักษณ์ Computationnal Thoery เยอะ แถมต้องแม่น Data Structure และ Programming Language พอสมควรอีก ถ้าใครคิดจะอ่านเล่มนี้ต้องหาหนังสือเล่มอื่น ๆ อ่านประกอบไปด้วยไม่งั้นนึกภาพตามไม่ออกจริง ๆ ขนาดเราว่าเราแม่น ๆ หลายวิชาแล้วนะ ยังอ่านแล้วอ่านอีก เพราะว่าอ่านยากจริง ๆ แต่ถ้าอ่านแรกเข้าใจนะ โห … สุด ๆ อ่านแล้วนี่ Optimize Code ที่เราเขียนห่วย ๆ ตอนปี 2-3 ได้สบาย ๆ เลย เหมาสำหรับคนที่ออกแนวชอบ Optimize Code หรือพวกชอบงานแนว ๆ Code Quality
เล่มต่อมาเป็น

Languages and Machines
An Introduction to the Theory of Computer Science (3rd Edition)



by Thomas A. Sudkamp

อันนี้ไม่พูดอะไรมาก ราคาไม่แพงพอ ๆ กับ Operating System (เพราะว่ามันเป็น International Edition มันเลยถูก ;) ) เอาไว้อ่านประกอบ Compilers ด้านบนนั้นแหละ แต่บางอย่างอาจขัดแย้งกันในบางเรื่องกับ Compilers คงต้องเลือก ๆ อ่านสักหน่อย แต่ถือว่าช่วยให้อ่านเจ้า Compilers ได้เยอะ

ปิดท้ายด้วย หนังสือสำหรับคนที่ชอบการออกแบบ Database

Database Management Systems

by Raghu Ramakrishnan and Johannes Gehrke

เล่มนี้เอาไว้เรียนวิชา Database และมันเป็นแหล่งอ้างอิงที่ดีในการทำ Database Tuning ด้วย คงไม่บรรยายอะไรมาก หาอ่านเอาแล้วกัน เล่มนี้ Concept แน่นดีมาก ๆ

ว่าง ๆ จะหาหนังสือดีมาแนะนำอีกนะ ไปก่อนหล่ะ แว็บบบบบบบ

ว่ากันด้วยเรื่องทรัพย์สินทางปัญญา, สิทธิบัตร และลิขสิทธิ์

พอดีว่าอ่าน Studying Law is Important ของคุณ mk แล้วนั่งหา ๆ ค้น ๆ ทำความเข้าใจว่าสิ่งที่เราเข้าใจกับความเป็นจริงนั้นถูกต้องหรือไม่

นั่งอ่านแล้วไปเจอที่ http://drug.pharmacy.psu.ac.th/Question.asp?ID=3700&gid=9 เลยนำมาเผยแพร่เสียเลยแล้วกัน ;)

สิทธิบัตร คือหนังสือสัญญา หรือเอกสารที่ได้รับการยินยอมและตรวจสอบแล้วจากทางหน่วยงานที่รับผิดชอบของประเทศนั้น ๆ ซึ่งมักจะเป็นจะเป็นการคุ้มครองทรัพย์สินทางปัญญาของงานด้านวิทยาศาสตร์ ที่มักเป็นการต่อยอดทางปัญญา จึงคุ้มครองชั่วระยะเวลาหนึ่ง ซึ่งเพียงพอที่จะเป็นรางวัลแก่ผู้ทรงสิทธิ์ และไม่นานเกินไปจนไม่เกิดการพัฒนาทางวิทยาศาสตร์ สำหรับสิทธิบัตรยาประเทศไทยคุ้มครองไว้ 20 ปี (นานกว่าประเทศพัฒนาแล้วบางประเทศเสียอีก)

ลิขสิทธิ์ จะเป็นการคุ้มครองทรัพย์สินทางปัญญากับงานวรรณกรรม เช่นเพลง โดยคุ้มครองตลอดชีวิตของผู้ทรงสิทธิ์และอีก 50 ปี ภายหลังจากผู้ทรงสิทธิ์เสียชีวิต โดยการดูแลของทายาทหรือผู้ที่ได้รับมอบมรดก

โดยแนวคิดแล้ว

ลิขสิทธิ์ มุ่งคุ้มครองการแสดงออก ไม่คุ้มครองสาระที่แฝงมากับการแสดงออกนั้น

สิทธิบัตร ก็จะคุ้มครองผลิตภัณฑ์หรือกรรมวิธี โดยลิขสิทธิ์จะได้มาอัตโนมัติฟรี ๆ เมื่อแสดงออกต่อสาธารณะ (จดทะเบียนก็ได้ เพื่อให้มีหลักฐานแน่นหนาทางกฎหมาย) และมีผลในทุกประเทศที่ร่วมใน Berne Convention (รวมไทย) ส่วนสิทธิบัตรต้องขวนขวายลงทุนให้ได้มา มีขั้นตอน มีค่าใช้จ่าย มีผลเฉพาะประเทศที่เกี่ยวข้อง เช่น มีสูตรปรุงอาหาร ถ้าเผยแพร่เป็นหนังสือ จะได้ลิขสิทธิ์ คนอื่นไม่มีสิทธิคัดลอกเผยแพร่โดยพลการ แต่จะปรุงอาหารตามนั้นกี่จานก็ได้ แต่ถ้าจะไปขึ้นสิทธิบัตร (ถ้าได้) คนอื่นไม่สามารถปรุงอาหารตามนั้นเลย แม้จะสามารถเข้าไปคัดลอกสูตรดังกล่าวได้ก็ตาม

ตาม พระราชบัญญัติลิขสิทธิ์ พ.ศ. 2537 ระบุว่า

มาตรา 6 งานอันมีลิขสิทธิ์ตามพระราชบัญญัตินี้ ได้แก่งานสร้างสรรค์ประเภทวรรณกรรม นาฏกรรม ศิลปกรรม ดนตรีกรรม โสตทัศนวัสดุ ภาพยนตร์สิ่งบันทึกเสียง งานแพร่เสียงแพร่ภาพ หรืองานอื่นใดในแผนกวรรณคดี แผนกวิทยาศาสตร์ หรือแผนกศิลปะ ของผู้สร้างสรรค์ไม่ว่างานดังกล่าวจะแสดงออกโดยวิธีหรือรูปแบบอย่างใดการคุ้มครองลิขสิทธิ์ไม่คลุมถึงความคิด หรือขั้นตอน กรรมวิธีหรือระบบหรือวิธีใช้หรือทำงาน หรือแนวความคิด หลักการ การค้นพบ หรือทฤษฎีทางวิทยาศาสตร์หรือคณิตศาสตร์

ใน พระราชบัญญัติสิทธิบัตร พ.ศ. 2522

มาตรา 9* การประดิษฐ์ดังต่อไปนี้ไม่ได้รับความคุ้มครองตามพระราชบัญญัติ
(1) จุลชีพและส่วนประกอบส่วนใดส่วนหนึ่งของจุลชีพที่มีอยู่ตามธรรมชาติ สัตว์พืช หรือสารสกัดจากสัตว์หรือพืช(2) กฎเกณฑ์และทฤษฎีทางวิทยาศาสตร์และคณิตศาสตร์
(3) ระบบข้อมูลสำหรับการทำงานของเครื่องคอมพิวเตอร์
(4) วิธีการวินิจฉัย บำบัด หรือรักษาโรคมนุษย์ หรือสัตว์(5) การประดิษฐ์ที่ขัดต่อความสงบเรียบร้อยหรือศีลธรรมอันดีอนามัย หรือสวัสดิภาพของประชาชน*[มาตรา 9 แก้ไขเพิ่มเติมโดยพระราชบัญญัติฯ (ฉบับที่ 2) พ.ศ. 2535]

มาตรา 5 ภายใต้บังคับมาตรา 9 การประดิษฐ์ที่ขอรับสิทธิบัตรได้ต้องประกอบด้วยลักษณะดังต่อไปนี้
(1) เป็นการประดิษฐ์ขึ้นใหม่
(2) เป็นการประดิษฐ์ที่มีขั้นการประดิษฐ์สูงขึ้น และ
(3) เป็นการประดิษฐ์ที่สามารถประยุกต์ในทางอุตสาหกรรม

รายละเอียด ควรศึกษาเพิ่มเติมจากข้อกฎหมายเอง จาก website ของ สนง กฤษฎีกา
http://www.krisdika.go.th

เอกสารอ้างอิง
http://www.krisdika.go.th
http://drug.pharmacy.psu.ac.th/Question.asp?ID=3700&gid=9

ภาษาโปรแกรมมิ่งไพธอน (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

หลักการเขียนโปรแกรม 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 เลย)


อ้างอิง

ว่าด้วย Basic Cocoa Training@Fortune จัดโดย ThaiMacDev.com

อบรมไปก็เกือบเดือน กว่าจะกลับมาเขียนต่อได้ -_- งานเยอะครับตอนนี้ T_T


ออกจากพิษณุโลกประมาณเที่ยงคืนกว่า ๆ จริง ๆ แล้วว่าจะไปตั้งแต่เช้าวันศุกร์แต่ว่าติดเรียน เลยต้องไปดึก ๆ กว่าจะถึงก็เกือบเช้า ไปนอนที่ห้องเพื่อนพี่กั่งก่อนสัก 3 – 4 ชั่วโมง แต่ว่าดันเหนื่อยเกิน เลยตื่นมา 9.30 น. พอดี ตอนนั้นเซงเลย เลยรีบ move ด้วยความรวดเร็วถึงที่อบรมก็ 10 โมงกว่า ๆ พอดีเข้าไป ยังไม่เริ่มอบรม ก็ค่อยยังชั่ว เฮ้อ …….. ซึ่งบรรยากาศโดยรวมทั้งหมดถึงว่าดีถึงดีมาก เพราะส่วนใหญ่เป็นคนที่มีความสนใจจริง ๆ และอยู่ในสายงานด้านการพัฒนาซอฟต์แวร์กันทุกคน ซึ่งทุกคนก็ผ่านประสบการณ์การออกแบบ, พัฒนา และดูแลซอฟต์แวร์น่าจะทุกคน ซึ่งก็มีหลาย ๆ คนรวมถึงผมด้วยที่ไม่ได้จับแม็คในการเขียนซอฟต์แวร์รวมไปถึงบางคนก็ไม่เคยใช้มาก่อน (แบบผม) ซึ่งท่านวิทยากร คือ อ.เดฟ ก็สอนได้เข้าใจกันแทบจะทุกคน ในรูปแบบการทำงานที่เข้าใจง่าย โดยในวันแรกก็เข้าส่วนของพื้นฐานกันก่อน เช่น ความรู้เบื้อต้นของ Cocoa Framework, แนวการพัฒนาแบบ OOP ใน Cocoa, การออกแบบซอฟต์แวร์แบบ MVC และการแนะนำเรื่องของระบบ NextStep (ซึ่งเป็นเหมือนรุ่นพ่อของ Mac OS X หรือ Darwin) ซึ่งเป็นเหมือนการทวบทวน และได้ความรู้ใหม่ ๆ ไปในตัว โดยเรื่องของการ coding นั้นในวันแรกไม่ค่อยได้ coding เท่าไหร่ อย่าง hand-on ตัวแรกที่ให้ทำก็ไม่มีให้ coding สักบรรทัด ซึ่งถือว่าเป็นการเริ่มต้นการอบรมที่ดีมาก ๆ ที่เป็นการนำจุดเด่นของการพัฒนาบน Cocoa Framework มาบอกในอันดับต้นซึ่งทำให้เราเห็นภาพว่า OOP นั้นมัน send/receive message ของแต่ละ object กันอย่างไร ซึ่งทำให้การออกแบบ OOP แบบเดิม ๆ นี่เด็ก ๆ ไปเลย

โดยในวันแรกนั้นมีการพูดถึงการเขียน code บนพื้นฐานของภาษา Objective-C ซึ่งมีผู้เข้าอบรมหลาย ๆ ท่านก็ได้แลกเปลี่ยนความคิดเห็นกันกับ อ.เดฟ และท่านอื่น ๆ ว่ามันแตกต่าง และใช้งานดีหรือไม่ดีอย่างไรเมื่อเทียบกับภาษาและ Framework อื่น ๆ ซึ่งทำให้ได้มุมมองที่กว้างและสนุกไปอีกแบบ ซึ่งในวันแรกไม่ได้เขียน code อะไรมากนัก เพราะส่วนใหญ่จะ preview Framework อย่าง Cocoa, ภาษา Objective-C และทำความเข้าใจหลักของ MVC เสียมากกว่า

มาวันที่สอง นี่ coding เพียบและมันกว่าเดิม โดยรวมคือเป็นลักษณะ workshop มากกว่าวันแรกอย่างมากเลยหล่ะ แต่ก็ยังคงเขียน code ในจำนวนบรรทัดที่น้อยกว่าที่เคยเขียนมาในงานที่ทำเหมือน ๆ กัน โดยเฉพาะงานอย่าง Binding เนี่ยเห็นชัดมาก ;)

งานนี้เรียนมันมาก แค่เรื่องไปเอา concept อย่าง OOP ในระดับมองทุกอย่างใน software เป็น World (แบบ Sim City หรือ The Sim) และ MVC ที่ในมหาวิทยาลัยสอนไม่ครบก็คุ้มแล้วคร้าบบบบบบบบ ส่วน Objective-C และการเขียนใน Cocoa Framework น่าจะเป็น Case Study ในการทำ Application ในอนาคตได้มากเลย