Monday, September 13, 2010

Software Reviews

จัดการ sequence ง่ายๆ ด้วยการใช้ SeaView

ประเวช อรรจวัฒนวงศ์


ผมเชื่อว่าเพื่อนหลายคนที่ทำวิจัยด้าน sequence analysis คงเคยประสบกับปัญหาเรื่องการเลือกใช้โปรแกรมคอมพิวเตอร์มาใช้แสดง DNA sequence หรือ protein sequence รวมทั้งไม่รู้ว่าจะทำ sequence alignment อย่างไรดี โปรแกรมหนึ่งที่คนส่วนมากรู้จักคือ BioEdit แต่นั่นก็มีข้อจำกัดตรงที่ โปรแกรมนี้ใช้ได้เฉพาะระบบปฏิบัติการ Windows เท่านั้น ใครที่เป็นสาวกของ Apple Macintosh หรือชอบใช้ระบบปฏิบัติการ UNIX อย่าง Ubuntu ก็ไม่สามารถใช้งานโปรแกรมตัวนี้ได้


วันนี้ผมมีโปรแกรมคอมพิวเตอร์ตัวหนึ่งมานำเสนอ นั่นก็คือ SeaView ครับ โปรแกรมนี้เขียนขึ้นโดยนักวิจัยชื่อ Manolo Gouy และกลุ่มวิจัยของเขาซึ่งเป็นกลุ่มวิจัยจากฝรั่งเศส อันที่จริงโปรแกรมนี้ก็ไม่ใช่ของใหม่อะไร แต่ที่ใหม่คือโปรแกรมนี้เพิ่งจะออก version 4.2.6 ซึ่งเป็น version ล่าสุดในปีนี้เองครับ ท่านที่สนใจอยากลองใช้หรือทดสอบความสามารถของโปรแกรมก็ download มาใช้ได้จากเว็บไซต์ของ SeaView โดยตรงครับ โดยไปที่ http://pbil.univ-lyon1.fr/software/seaview.html ซึ่งเวบไซต์ดังกล่าวก็มีหน้าตาแบบที่ปรากฏในรูปครับ แล้วก็เลือก download โปรแกรมให้ตรงกับระบบปฏิบัติการของเครื่องคอมพิวเตอร์ที่ท่านใช้งานอยู่ เท่านี้ก็ได้ SeaView มาใช้แล้วครับ โปรแกรมนี้ไม่ต้อง install แต่อย่างใด คือเปิดใช้งานได้เลยครับ


อันที่จริง SeaView ไม่ใช่โปรแกรมที่ทำงานด้าน sequence alignment ที่ดีที่สุด แต่ที่ผมนำมาเสนอในคอลัมน์นี้ก็เพราะว่ามันมีจุดเด่นหลายอย่างครับ ข้อแรก โปรแกรมนี้เป็น multiplatform นั่นก็คือสามารถทำงานได้บนระบบปฏิบัติการหลายชนิด ทั้งระบบ Windows, Mac OS, Linux และยังสามารถทำงานบน server ที่ใช้ระบบปฏิบัติการแบบ Solaris ได้อีกด้วยครับ ข้อสอง โปรแกรมนี้เป็น open source ครับ นั่นก็แปลว่าฟรีไงครับ ผมเลยคิดว่าโปรแกรมนี้น่าจะเป็นทางเลือกสำหับนักวิจัยที่มีทุนน้อย และยังเหมาะกับการเรียนการสอนด้วย เนื่องจากไม่ต้องเสียสตางค์ซื้อเลยครับ ข้อสาม โปรแกรมนี้มีระบบ GUI หรือทำงานผ่านระบบกราฟฟิกครับ ทำให้ user ไม่ต้องปวดหัวกับ command line ที่ยาก (หลายคนชอบบ่นว่า command line มันยาก แต่ผมว่ามันก็ไม่ยากอย่างที่คิดนะ) ข้อสี่ ความสามารถของโปรแกรมนี้สามารถรองรับงานหลักๆ ของการศึกษา sequence analysis ได้พอสมควร


เอาล่ะครับ ความสามาถหลักๆ ของโปรแกรมที่ผมกล่าวทิ้งไว้ก็มีอยู่ด้วยกัน 3 ส่วนครับ ส่วนแรก คือการเชื่อมต่อกับฐานข้อมูลใหญ่ๆ เพื่อ download sequence ซึ่งโปรแกรมสามารถดึงข้อมูลจากฐานข้อมูล GenBank EMBL และ UniProt ผ่านระบบ internet ได้ ความสามารถส่วนที่ 2 คือ การ alignment ครับ โปรแกรมนี้ได้ merge โปรแกรมสำหรับทำ sequence alignment ไว้ 2 ตัวครับ นั่นก็คือ ClustalW และ muscle นักวิจัยในกลุ่มที่เชี่ยวชาญด้าน sequence analysis เขาทราบกันดีว่า ClustalW เป็นโปรแกรมที่มีความถูกต้อง (accuracy) น้อยมาก และไม่เป็นที่นิยมแล้ว แต่โปรแกรมนี้ก็ยังคงมีข้อดีด้านความเร็วครับ สำหรับงานวิจัยบางอย่างที่ต้องการทำ alignment ของ sequence จำนานมาก (500-10,000 sequences) ก็สามารถใช้โปรแกรมตัวนี้ทำ alignment เพื่อการดูผลของ alignment แบบคร่าวๆ ก่อนได้ ส่วนโปรแกรม muscle จัดเป็นโปรแกรมที่มีความถูกต้องสูงกว่า ClustalW มากและยังมีจุดเด่นเรื่องการใช้ CPU time ด้วย เพราะใช้เวลาในการ run น้อย รวมทั้งยังเป็นที่นิยมมากกว่าด้วย อันนี้ก็เป็นทางเลือกให้ user ครับ แต่สำหรับ user ที่ไม่ต้องการจะใช้โปรแกรมทั้ง 2 ชนิดนั้น หรือจำเป็นต้องใช้โปรแกรมอื่น SeaView ก็จัด option มาให้ user ดึงโปรแกรมสำหรับ alignment อย่างอื่นเข้ามาใช้ร่วมด้วยได้ โดย user จะต้องบอกให้ SeaView ทราบถึง argument ของโปรแกรมใหม่ เพียงเท่านี้ท่านก็เพิ่มประสิทธิภาพให้ SeaView ได้แล้วครับ ข้อดีอันนี้ทำให้ประสิทธิภาพของ SeaView ไม่ได้ถูกจำกัดด้วยจำนวนโปรแกรมที่มีมาในตอนต้นครับ ความสามารถอย่างสุดท้ายของโปรแกรมก็คือ การทำ phylogenetic tree ไงครับ โปรแกรม SeaView มีทางเลือกให้ user สามารถสร้าง phylogenetic tree ได้ 3 วิธีด้วยกับ คือ distance, parsimony และ maximum likelihood และในวิธี maximum likelihood ยังสามารถเลือกใช้ model ในการสร้าง tree ได้ถึง 7 models ด้วยกัน โดย model ที่มีความซับซ้อนมากที่สุดที่โปรแกรมจัดไว้ให้คือ GTR model ครับ


ท่านที่ชื่นชอบและได้นำโปรแกรม SeaView ไปใช้ในงานวิจัยและตีพิมพ์งานวิจัยของท่านไปแล้ว ก็อย่าลืมอ้างอิง paper ของโปรแกรมด้วยครับ การอ้างอิงก็ใช้รูปแบบตามที่แสดงไว้ด้านล่างนี่เลยครับ


Gouy M., Guindon S. & Gascuel O. (2010) SeaView version 4: a multiplatform graphical user interface for sequence alignment and phylogenetic tree building. Molecular Biology and Evolution 27(2):221-224.


ผมคิดว่า หลายคนคงยิ้มแล้ว เพราะได้ของเล่นชิ้นใหม่ไปลองเล่นกันแล้ว แล้วพบกันใหม่ครับ

Talk to...

คุยกับ ดร. ณัฏฐิกา สุวรรณาศรัย

ศิริขวัญ พลประทีป


กลับมารายงานตัวอีกครั้งนะคะ หลังผ่านเหตุวุ่นวายมาพักใหญ่ในเมืองไทย ต้องบอกว่าโชคดีมากๆ เลยที่ บก. ใจดีของเรามาปฏิบัติหน้าที่แทนปุ้ม ซึ่งทำให้เราได้รู้จักผู้หญิงเก่งในต่างๆ แดนกันค่ะ


ฉบับนี้ปุ้มกลับมารับหน้าที่ อาสาพาท่านผู้อ่านมาทำความรู้จักกับอาจารย์นักวิจัยสาวสวยอีกคนหนึ่งค่ะ อาจารย์ท่านนี้ก็คือ ดร. ณัฏฐิกา สุวรรณาศรัย หรือพี่เอ๋ค่ะ พี่เอ๋เป็นอาจารย์อยู่ที่ภาควิชาจุลชีววิทยา คณะวิทยาศาสตร์ มหาวิทยาลัยศรีนครินทร์วิโรฒค่ะ งานนี้เฉพาะกิจจริงๆ เพราะเราได้คุณพี่ บก. ที่พึ่งกลับมาจากสวีเดน มานั่งคุยด้วยอีกคนค่ะ คือแบบว่าพอปุ้มได้รับกริ๊งจากคุณพี่ บก. ก็เบิ่งออกจากห้องแลปทันทีเลยค่ะ วันนี้นอกจากจะได้รับความรู้ใหม่ๆ จากพี่เอ๋แล้ว ปุ้มก็ยังอิ่มด้วยนะคะ วันนี้เราคุยกันแบบสบายๆ talk ไป กินไปที่ร้านฟูจิ มาบุญครอง ชั้น 7 ค่ะ...


พี่เอ๋กับพี่ปิงรู้จักกันได้อย่างไรค่ะ


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


ตอนเรียนอยู่ที่มหาวิทยาลัยมหิดล พี่เอ๋ทำวิทยานิพนธ์เกี่ยวกับอะไรคะ


ตอนนั้น งานวิทยานิพนธ์ของพี่เกี่ยวกับการโคลนยีนฟอสโฟไลเปส ซี (phospholypase C) จากเชื้อแบคทีเรีย Burkholderia pseudomallei หลังจากนั้นก็นำโคลนที่ได้มาผลิตโปรตีนฟอสโฟไลเปส ซี เพื่อที่จะนำใช้ในการผลิต antibody ที่จำเพาะต่อเชื้อก่อโรคตัวนี้ค่ะ


หลังจากที่พี่เอ๋เรียนจบปริญาโทแล้วเรียนต่อปริญาเอกเลยหรือเปล่าค่ะ


หลังจากที่พี่จบปริญาโทแล้วพี่ทำงานก่อนค่ะ แต่เป็นงานที่เกี่ยวข้องกับ systematics ของเห็ดรา ซึ่งไม่เกี่ยวกับงานวิจัยตอนปริญญาโทเลยค่ะ งานที่ทำ จะอยู่ในส่วนของโครงการพระราชดำริของสมเด็จพระเทพฯ ภายในบริเวณพระราชวังสวนจิตรดาค่ะ โดยทำการแยกชนิดของตัวอย่างเห็ดและเชื้อรา ตอนนั้นก็ใช้เทคนิค RAPD (Random Amplification of Polymorphic DNA) และเทคนิค AFLP (Amplified Fragment Length Polymorphism) ในการจำแนกชนิดของเห็ดและเชื้อราประเภทต่างๆ ค่ะ


อะไรที่ทำให้พี่เอ๋ หันมาเรียนต่อในระดับปริญญาเอกค่ะ


คือ ตอนนั้นมีอาจารย์ที่ สวทช. มาชวนให้เรียนต่อระดับปริญญาเอกที่มหาวิทยาลัยเทคโนโลยีสุรนารี ซึ่งอาจารย์ที่ปรึกษาของพี่ก็เสนอมีทุนการศึกษาให้ด้วยค่ะ โดยในส่วนของวิทยานิพนธ์ก็ยังคงอยู่ในเรื่องของ systematics ของเห็ดราเหมือนเดิมค่ะ


เรียกได้ว่าเริ่มต้นงานวิจัยได้เลยเพราะมีประสบการณ์อยู่แล้ว


ใช่ค่ะงานวิจัยที่พี่ทำจะศึกษาเกี่ยวกับการจำแนกชนิดของเห็ดรา โดยจะจำแนกโดย 3 ลักษณะ คือ แบบแรกจำแนกตามลักษณะจากรูปร่างสัณฐานวิทยาของเห็ดรา (morphology) แบบที่สองจะแยกตามสาร secondary metabolize ของเห็ดรา ส่วนแบบที่สามจะเป็นการใช้เทคนิคทางด้านอณูชีววิทยา (molecular biology) ในการหาลำดับเบสในส่วนของยีน ribosomal RNA ค่ะ


ถ้าสมมุติว่าปุ้มได้ตัวอย่างเห็ดรามาชนิดหนึ่ง แต่ไม่แน่ใจว่าจะเป็นชนิดที่เคยศึกษามาแล้ว และได้รับการตั้งชื่อวิทยาศาสตร์มาแล้ว หรือว่าเป็นชนิดใหม่ที่ยังไม่มีใครเคยรู้จัก แบบนี้ ปุ้มควรจะตรวจสอบอย่างไรดี


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


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


นั่นสิคะ พี่ปิง อย่างนี้เวลาเราสกัดสารพันธุกรรมคงได้มาทั้งสองตัวเลยนะคะ ทั้งราและสาหร่าย ไม่รู้ว่าจะจำแนกตัวไหนดีค่ะ คงต้องให้พี่ปิงและพี่เอ๋ช่วยเฉลยให้ฟังหน่อยแล้วค่ะ


พี่ปิง: สิ่งมีชีวิตทั้งสองนี้ (คือเชื้อรากับสาหร่าย) เขามีการอยู่ร่วมกันแบบ symbiosis ซึ่งต่างฝ่ายต่างก็ได้ประโยชน์ด้วยกันทั้งคู่ การดำรงชีพร่วมกันแบบนี้ เชื้อราจะเป็นสิ่งมีชีวิตหลักครับ ส่วนสาหร่ายเป็นตัวที่เข้ามาเสริมตามชนิดของเชื้อราซึ่งทำให้ไลเคนมีความแตกต่างกันครับ โดยเวลาที่จะจำแนกชนิดของไลเคน เขาจะทำการศึกษาชนิดของเชื้อราในไลเคนครับ นักวิจัยหลายทีมศึกษาไลเคนโดยใช้ phylogenetic tree เข้ามาช่วยครับ เขาก็จะทำ sequencing จากสารพันธุกรรมของเชื้อราในไลเคนนี่แหละครับ


พี่เอ๋คะ ถ้าลงลึกไปถึงระดับชีวโมเลกุลของเห็ดรา เราจะสามารถจำแนกชนิดเห็ดราได้ด้วยวิธีไหนคะ


สามารถทำได้โดยการเปรียบเทียบลำดับของนิวคลีโอไทด์ค่ะ โดยนำตัวอย่างเห็ดรามาทำการบดก่อน ซึ่งสามารถใช้แผ่น slide สองแผ่นสีกันโดยให้ตัวอย่างอยู่ตรงกลางได้เลยนะคะ จากนั้นนำตัวอย่างมาสกัดสารพันธุกรรมของเห็ดราและนำมาหาลำดับนิวคลีโอไทด์ของยีน ITS (internal transcribed spacer) บน ribosomal RNA จากนั้นนำข้อมูลลำดับนิวคลีโอไทด์ที่ได้มาทำการเปรียบเทียบกับลำดับเบสของยีน ITS ในฐานข้อมูลของ NCBI โดยใช้โปรแกรม blast ได้เลยค่ะ ซึ่งยีน ITS นี้มีความหลากหลายสูงในสปีชีส์ที่ใกล้เคียงกันค่ะ โดยทั่วไปแล้วยีนนี้เป็นยีนที่นิยมใช้ในการเปรียบเทียบความแตกต่างของเห็ดราได้ในระดับสปีชีส์เลยค่ะ นอกจากนั้นเรายังสามารถนำข้อมูลมาใช้ในการหาความใกล้ชิดกันของเห็ดรา ชนิดต่างๆ โดยการทำ molecular phylogeny ได้ด้วยนะคะ


การจำแนกเชื้อรามีทั้งแบบที่ศึกษารูปร่างทางสันฐานวิทยาที่แตกต่างกันและมีศึกษาลงลึกไปในระดับชีวโมเลกุลโดยการหาลำดับเบสด้วย แล้วถ้าเราสนใจที่จะดูความใกล้ชิดของเห็ดราเราควรจะศึกษาอย่างไรคะ


การจำแนกลักษณะจากรูปร่างสันฐานวิทยาของเชื้อราหรือการเปรียบเทียบลักษณะของลำดับนิวคลีโอไทด์ ทั้งสองวิธีนี้สามารถนำมาสร้างความสัมพันธ์แบบ phylogenetic tree ได้ทั้งคู่นะคะ


พี่ปิง: ใช่แล้วครับ phylogenetic tree สามารถสร้างได้จากข้อมูลทั้งสองแบบผสมผสานกัน (คือ morphology และ sequence)


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

Meeting & Conference

ตามดูงานเปิดบ้านวิทยาศาสตร์ มหาวิทยาลัยมหิดล 2553

จิตสุพางค์ รอดบำเรอ


Science & Society ฉบับนี้ ก้อยจะพาคุณผู้อ่าน บุกไปเที่ยวงาน open house ซึ่งก็คืองานวันเปิดบ้านวิทยาศาสตร์ ซึ่งงานนี้จัดขึ้นที่คณะวิทยาศาสตร์ มหาวิทยาลัยมหิดลค่ะ ก้อยเห็นว่าเป็นกิจกรรมวิทยาศาสตร์ที่น่าสนใจ เลยถือโอกาสสะพายกล้องถ่ายรูปไปเดินเก็บบรรยากาศมาฝากกันซะหน่อย


งาน “OPEN HOUSE 2010” ของคณะวิทยาศาสตร์ มหาวิทยาลัยมหิดล จัดขึ้นในช่วงเดือนสิงหาคม เป็นประจำทุกปี ซึ่งปีนี้บังเอิญจัดในวันวิทยาศาสตร์พอดิบพอดีเลยค่ะ คุณผู้อ่านบางท่านอาจจะยังไม่ทราบว่า วันที่ 18 สิงหาคม ของทุกปี คือวันวิทยาศาสตร์ไทย ซึ่งโดยทั่วไปแล้วก็จะมีการจัดงานสัปดาห์วิทยาศาสตร์ในหลายๆ สถานที่ที่เกี่ยวข้องกับวิทยาศาสตร์อีกด้วย


งานวันเปิดบ้าน เขาจัดขึ้นมาทำไม?


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


การเดินชมทั่วไหมเนี่ยะ?


ขอบอกเลยว่า ถ้าน้องๆ เข้ามาเดินดูแบบ ตั้งใจหาความรู้ มีการเข้าไปพูดคุยซักถามกับพี่ๆ ที่ตั้งใจนำเสนออย่างจริงจัง ตอบได้แบบเต็มปากเต็มคำเลยว่า “ไม่ทั่วแน่นอน” ก็งานเขาจัดแค่วันเดียวเองนี่ค่ะ (ของดีเค้ามีกันแค่ปีละวัน) เพราะคณะวิทยาศาสตร์ มหาวิทยาลัยมหิดล ที่พญาไท มีสาขาวิชาต่างๆ เยอะมาก ถึงแม้ว่าในระดับปริญญาตรี จะเปิดแค่ 6 ภาควิชา แต่ในระดับบัณฑิตศึกษา (คือปริญญาโทและเอก) มีถึง 12 ภาควิชาเลยทีเดียว แล้วในแต่ละภาควิชาก็จะมี module เฉพาะเจาะลึกลงไปอีก ยังไม่หมดแค่นี้ค่ะ นอกจากภาควิชาต่างๆ แล้ว ยังมีหน่วยงานหรือว่าโครงการอื่นๆ อีก เช่น หน่วยวิจัยความเป็นเลิศ (มีจำนวน 4 ศูนย์) โครงการศึกษานิเวศวิทยาของนกเงือก โครงการบัณฑิตนิติวิทยาศาสตร์ เป็นต้น บรรดาภาควิชาหรือโครงการเหล่านี้ ก็จะเปิดห้องปฏิบัติการให้น้องๆ เข้ามาเยี่ยมชม นอกจากนี้ยังมีกิจกรรม การทดลอง หรือเกมสนุกๆ ให้น้องๆ เข้ามามีส่วนร่วมอีกต่างหาก


เดินชมห้อง lab ที่เราสนใจ


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


เกริ่นมายืดยาว เอาเป็นว่าตอนนี้น้องๆ มัธยมเขากำลังเดินชมห้อง lab ต่างๆ ค่ะ ก้อยเองก็กำลังจะออกไปเก็บภาพมาฝากเพื่อนๆ ค่ะ แต่ต้องขอออกตัวไว้ก่อนว่า คงไม่สามารถไปเก็บภาพให้ครบทุกภาคฯ ได้นะคะ (มันเยอะจริงๆ) จากที่ไปเดินสำรวจดูรู้สึกว่าที่กายวิภาคศาสตร์จะมีน้องๆ เข้าแถวยาวเพื่อรอเข้าไปดู “อาจารย์ใหญ่” บริเวณที่รอจะติดกับสนามบาสฯ น้องบางคนก็ ฆ่าเวลาด้วยกันเล่นบาสฯ ซะเลย ภาคเทคโนโลยีชีวภาพก็ครึ้กครื้นไม่ใช่เล่น มีวงดนตรีของพี่นักศึกษามาแสดงสดที่หน้าภาคฯ และในงานเขาก็เปิดให้ชมเทคโนโลยีชีวภาพของแป้ง แบคทีเรีย เห็ด รา และการหมัก ซึ่งจะเน้นไปทางอาหารและอุตสาหกรรม ส่วนพี่ๆ ภาคชีวเคมีเขารวมเอาทุกกิจกรรมมารวมไว้ในห้องเดียว น้องๆ จะได้ไม่ต้องเดินหลายห้อง มีหัวข้อเรื่อง stem cell ด้วยนะ ช่วงนี้มีแต่คนพูดถึง stem cell เยอะไปหมด ที่ภาคสรีรวิทยามีการจัดให้น้องๆ ทดสอบสมรรถภาพร่างกายด้วยนะคะ นิติวิทยาศาสตร์ ก็มีการจำลองสถานที่เกิดเหตุ การตรวจพิสูจน์ลายนิ้วมือ คราบเลือด (นึกถึงหน้าคุณหญิงหมอพรทิพย์ลอยขึ้นมาเลยค่ะ) โครงการศึกษานิเวศวิทยาของนกเงือกก็น่าสนุก อันนี้เขามาจัดกันในสวนค่ะ เพราะมีการสอนวิธีขึ้นต้นไม้ ซึ่งพี่ๆ เขาใช้ปีนขึ้นไปดูโพรงนกเงือกในป่า ซึ่งจะอยู่บนต้นไม้ที่สูงมากๆ พี่เขามีอุปกรณ์ช่วยยึดจับกับเชือกที่ใช้ในการปีน เลยมีน้องๆ สนใจมาลองไต่เชือกกันหลายคนเลย นอกจากนี้ก็มีโพรงเทียม มาให้ดูด้วยเพราะบางครั้งต้นไม้ใหญ่ ที่มีโพรงมันหายาก เดี๋ยวนกจะหาที่พักฟักไข่ไม่ได้ เราก็เลยต้องช่วยโดยการทำโพรงเทียมเอาขึ้นไปแขวนไว้บนต้นไม้ใหญ่ไง นอกจากนี้ยังมีการวิเคราะห์เสียงร้องของนกเงือก ด้วยโปรแกรมคอมพิวเตอร์อีกด้วยนะ ไฮเทคทีเดียว


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

Thursday, August 19, 2010

ฉบับที่ 12 (สิงหาคม 2010)

Editorial


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


“อย่าให้ใครเอาไปล้อเลียนว่า ราคาของสมองคนไทยขายได้ราคาดีพิเศษ สำหรับคนที่ต้องการจะผ่าตัดเปลี่ยนสมอง เพราะสมองคนไทยไม่ค่อยได้ใช้เท่าไหร่ ยังดูเหมือนใหม่เสมอ


อ่านดูเผินๆ แล้วก็ขำดีครับ เรียกเสียงหัวเราะกันไปพักใหญ่ แต่พอมานึกดูดีๆ ผมว่ามันอาจจะจริงขึ้นมาได้สักวัน ถ้าหากคนไทยยังไม่ใส่ใจกับการศึกษาให้มากกว่านี้ หรือแม้แต่ภาครัฐฯ และกลุ่มผู้ที่มีความสามารถในการส่งเสริมการศึกษาและเวทีการแสดงออกของคนไทยทั้งหลาย หากท่านเหล่านั้นไม่ช่วยกันผลักดัน สักวันสมองคนไทยจะมีค่ามากในตลาดค้าอวัยวะ :-)


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


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


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


ท้ายนี้ ผมต้องขอขอบคุณท่านผู้อ่านและผู้สนใจทุกท่านที่ส่งอีเมลมาให้กำลังใจและข้อเสนอแนะดีๆ กับเรา ผมในนามของทีมงานทุกคน จะรับคำติชมทั้งหมดไปปรับปรุงให้วารสารออนไลน์ THAI Bioinformatics ดีขึ้นไปเรื่อยๆ และตอนนี้เรามีอีเมลของเราเองแล้ว ท่านที่มีข้อติชมสามารถส่งอีเมลเข้ามาได้ที่ thaibioinfo@gmail.com หรือจะส่งอีเมลเข้ามาพูดคุยกันก็ยินดีครับ...

Highlight

ชีววิทยาระบบ (Systems Biology)

วรรณวิภา วงศ์แสงนาค


ชีววิทยาระบบ (systems biology) คือ ศาสตร์ที่อาศัยความรู้หลากหลายด้าน ยกตัวอย่างเช่น ความรู้ทางด้านชีววิทยา คณิตศาสตร์ชั้นสูง วิทยาการคอมพิวเตอร์ ชีวเคมี รวมถึง ชีวสารสนเทศศาสตร์ (bioinformatics) เพื่อศึกษาความสัมพันธ์ระหว่างส่วนประกอบแยกย่อยของสิ่งมีชีวิตในภาพรวม (holistic view) แทนการศึกษาส่วนประกอบย่อยๆ ทีละส่วน การแสดงความสัมพันธ์ระหว่างกันทั้งนี้เพื่อให้สามารถเข้าใจการทำงานโดยตลอดตั้งแต่ระดับ molecular level จนถึงระดับ organism level (ตั้งแต่ระดับ DNA จนถึงระดับเซลล์) ดังรูป 1 ซึ่งส่วนใหญ่การศึกษาด้านชีววิทยาระบบนี้เราจะเน้นการสร้างแบบจำลอง (model) เพื่อศึกษาปราฏการณ์ภายในเซลล์ของสิ่งมีชีวิตบนคอมพิวเตอร์ โดยอาศัยข้อมูลจำนวนมากและการคำนวณเป็นพื้นฐาน ซึ่งส่วนใหญ่ข้อมูลจำนวนมากที่มีความสำคัญจะได้มาจาก เทคโนโลยีขั้นสูง (high throughput technology) ในยุคหลังจีโนม ดังนั้นศาสตร์ด้านนี้จึงมีประโยชน์มากที่ช่วยให้นักชีววิทยาสามารถศึกษาส่วนประกอบย่อยๆ หลายๆ ส่วนได้อย่างพร้อมๆกัน


การวิจัยของห้องปฏิบัติการชีววิทยาระบบมีหลายวิธี แต่วิธีหนึ่งที่น่าสนใจ จะเน้นการวิเคราะห์เชิงระบบของวิศวกรรมเมตาโบลิค (metabolic engineering) ของสิ่งมีชีวิตต่างๆ อาทิเช่น ยีสต์ (Saccharomyces cerevisiae) และ รา (Aspergillus sp.) เพื่อเข้าใจชีววิทยาเชิงระบบของสิ่งมีชีวิตเหล่านี้ ซึ่งจะนำไปสู่การปรับปรุงสายพันธุ์ เพื่อนำไปใช้ในด้านอุตสาหกรรมต่างๆ กลุ่มวิจัยมีการพัฒนา แบบจำลองทางคณิตศาสตร์ (mathematical modeling) โดยใช้เครื่องมือและโปรแกรมด้านชีวสารสนเทศ (bioinformatics tools) ฐานข้อมูลด้านชีววิทยาต่างๆ โดยเฉพาะข้อมูลจีโนม (genome sequence) ข้อมูลยีน ข้อมูลเอนไซม์ ข้อมูลเมตาโบไลท์ ข้อมูลโปรตีน พร้อมกับการศึกษาด้านชีวเคมี (biochemistry) และการหมัก (fermentation) ในห้องปฏิบัติการ จากที่กล่าวมาเบื้องต้น ห้องปฏิบัติการชีววิทยาระบบ (systems biology) สามารถพัฒนาแบบจำลองทางคณิตศาสตร์ และจำลองพฤติกรรมของเซลล์ภายใต้การเปลี่ยนแปลงสภาวะแวดล้อมการเลี้ยงเซลล์ไม่ว่าจะเป็นอาหารเลี้ยงเชื้อต่างๆ (แหล่งคาร์บอนหรือไนโตรเจน) นอกจากนี้เรายังสามารถสร้างแบบจำลองพฤติกรรมของเซลล์ภายใต้การเปลี่ยนแปลงด้านยีนบนคอมพิวเตอร์ ควบคู่กับการเปรียบเทียบผลการทดลองควบคู่กับการเปรียบเทียบผลการทดลองในห้องปฏิบัติการ ดังรูป 2


เทคนิคการทำ model simulation


มีหลายวิธีในการทำ genome-scale metabolic model Simulation วิธีการที่นิยมใช้ คือ flux balance analysis (FBA) เพื่อความเข้าใจในกระบวนการเมตาบอลิซึมของเซลล์ภายใต้การเปลี่ยนแปลงสภาวะแวดล้อมต่างๆ FBA เป็นวิธีการทางคณิตศาสตร์เพื่อวิเคราะห์การเผาผลาญ ไม่ต้องการความเข้มข้นของสาร (metabolite concentration) หรือรายละเอียดของจลนพลศาสตร์ของเอนไซม์ของระบบ ภายใต้สมมติฐานที่ว่าระบบที่เราศึกษาเป็น homeostatic และเทคนิคนั้นมีวัตถุประสงค์เพื่อตอบคำถาม เช่น อัตราการเติบโตของเซลล์ อัตราการใช้พลังงานของเซลล์ อัตราการผลิตสาร product หรือแม้แต่ by-product


เทคนิคการวิเคราะห์ข้อมูลหลายระดับและการวิเคราะห์ข้อมูลโครงข่าย


ในการที่เราจะเข้าใจในชีววิทยาของสิ่งมีชีวิต อย่างที่ได้กล่าวมาในตอนต้น ชีววิทยาระบบเป็นศาสตร์ที่เป็นหัวใจสำคัญ แบบจำลองที่ถูกสร้างขึ้นเป็นเหมือนจุดเริ่มต้น (scaffold) เพื่อให้เราเข้าใจกระบวนการพื้นฐานของเซลล์ กระบวนการเมตาบอลิซึม ไปจนถึงกระบวนการเจริญเติบโตของเซลล์และการผลิต product แต่อย่างไรก็ตามแบบจำลองก็ยังไม่เพียงพอที่จะทำให้เราเข้าใจทั้งระบบของเซลล์ โดยเฉพาะในโครงข่ายที่ควบคุมโครงข่ายเมตาบอลิซึม (metabolic network) ซึ่งเราเรียกว่า regulatory network ดังนั้นเทคนิคการวิคราะห์ข้อมูลหลายระดับ ไม่ว่าจะเป็นด้าน transcriptome ด้าน proteome หรือด้าน metabolome และการวิคราะห์ข้อมูลโครงข่ายเป็นหัวใจสำคัญเช่นกัน ดูรูปที่ 3 หน้าถัดไป


มุมมองในทิศทางของชีววิทยาระบบ


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

Python Programming

Reverse complement สาย DNA ด้วย Python (ภาค 2)

ประพัฒน์ สุริยผล


ครั้งที่แล้วเราได้โปรแกรมที่ใช้งานจริงไปเรียบร้อยแล้ว แต่ในแง่ของตัวโปรแกรมเอง ยังไม่น่าพอใจสักเท่าไหร่ แถมตัวโปรแกรมเองยาวตั้ง 25 บรรทัด ซึ่งงานในลักษณะนี้ ภาษา python ไม่น่าจะต้องเขียนยาวขนาดนั้น เสียยี่ห้อ python หมด


ครั้งนี้ เราจะมาเรียนรู้กันว่า ถ้าเขียนโปรแกรมทำ reverse complement แบบ python ควรจะเป็นอย่างไร


Reverse_sequence function revisit


จุดแรก เรามาดูกันที่ฟังก์ชัน reverse_sequence กันก่อนนะครับ ซึ่งครั้งที่แล้วเราเขียนเอาไว้ 5 บรรทัดดังนี้


def reverse_sequence(dna):

____result = ""

____for base in dna:

________result = base+result

____return result

จุดประสงค์คือคืนค่า sequence ที่ reverse แล้ว โดยเราจะวนลูปเองทีละเบส แต่ครั้งนี้เราจะเรียกใชัฟังก์ชันที่ python เตรียมเอาไว้ให้เราอยู่แล้ว ชื่อว่า reverse ที่ออกแบบมาใช้กับตัวแปรประเภท list ดังตัวอย่าง


ผมลองสาธิตตัวอย่างคำสั่งนี้ด้วยการพิมพ์คำสั่งที่ python command line ถ้าหากสนใจจะลองเปิดโปรแกรม python command line แล้วพิมพ์ตามได้ครับ บรรทัดที่พิมพ์คือบรรทัดที่ขึ้นต้นด้วย >>> ส่วนบรรทัดที่ไม่มีสัญลักษณ์ >>> จะเป็นสิ่งที่ python ���อบเรากลับมา


>>> a = [1,2,3,4]

>>> a.reverse()

>>> a

[4, 3, 2, 1]

จะเห็นว่าคำสั่ง reverse จะ reverse ข้อมูลใน list ให้เรา โดยที่เราไม่ต้องเขียนลูปเอง แต่ถ้าเราใช้คำสั่ง


>>> a = "atgc"

>>> a.reverse()

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'str' object has no attribute 'reverse'


โปรแกรม python จะโวยวายออกมาว่า เราไม่สามารถใช้คำสั่ง reverse กับตัวแปร string ได้ ทั้งที่ในความจริงแล้ว ตัวแปร string ก็คือ list ของตัวอักษรนั่นเอง เราจะแก้ปัญหานี้ด้วยการบอก python ว่าเราต้องการให้มอง string เป็น list

>>> a = "atgc"

>>> list(a)

['a', 't', 'g', 'c']


จะเห็นว่า ถ้าเราส่งตัวแปร string ไปให้ฟังก์ชัน list เราก็จะได้ list ของเบสต่างๆ ออกมา แต่เราไม่ได้เขียนฟังก์ชัน list ขึ้นมา ทำไมเราถึงเรียกใช้ได้ คำตอบคือ ฟังก์ชัน list เป็น built-in function ที่ python เตรียมเอาไว้ให้เราเรียกใช้ได้เลย เราไม่ต้องเขียนเองเพิ่ม แต่งานของเรายังไม่จบครับ เพราะว่าการทำงานของฟังก์ชันเดิม โปรแกรมจะคืนค่าเป็น string ที่ reverse แล้ว แต่ถ้าเราใช้คำสั่ง reverse เราจะยังได้ข้อมูลเป็น list อยู่ โจทย์ถัดไปที่เราจะต้องหาคำตอบให้ได้คือ ทำอย่างไรจึงสร้าง string จาก list ได้


วิธีตรงไปตรงก็มา ก็คือใช้ลูป

dna_string = ""

for base in my_list:

____dna_string = dna_string+base


พอลูปครบถ้วน เราก็จะได้ตัวแปร string ที่มาจาก list


แต่ถ้าเราทำแบบนี้ โปรแกรมครั้งนี้ของเราก็ไม่ได้สั้นกว่าครั้งที่แล้วเลย ยาวกว่า และออกจะน่าเกลียดกว่าด้วย


python มีวิธีที่ดีกว่านี้มาให้เราแล้ว


คำสั่ง Join เพื่อเชื่อมแต่ละ items ใน list


เราจะใช้คำสั่งอีกตัวหนึ่งคือ join เพื่อเชื่อมโยงแต่ละข้อมูลใน list ดังตัวอย่าง


>>> a = ["a","b","c","d"]

>>> '*'.join(a)

'a*b*c*d'


ถ้าเรามีตัวอักษรอยู่ใน list แล้วเราใช้คำสั่ง join ดังตัวอย่าง python จะนำเอาตัวอักษรที่อยู่ก่อน join ไปแทรกอยู่ระหว่างข้อมูลแต่ละ items ใน list ซึ่งเราสามารถในไปใช้งานได้หลายอย่างเช่น


>>> a = ["apple", "banana", "cow"]

>>> 'and'.join(a)

'appleandbananaandcow'

ซึ่งอ่านไม่รู้เรื่อง เราแก้ไขด้วยการเพิ่ม space (เว้นวรรค) หน้าและหลัง and


>>> ' and '.join(a)

'apple and banana and cow'

ก็จะได้ string ที่อ่านออก เราสามารถทำ comma-delimited text ง่ายๆ ด้วยคำสั่ง join เช่นกัน

>>> ', '.join(a)

'apple, banana, cow'


ให้สังเกตการใช้คำสั่ง join ให้ดีนะครับ จะเริ่มต้นด้วย string ที่เราต้องการใช้เชื่อมแต่ละ items ใน list แล้วตามด้วยจุดและคำสั่ง join และส่งค่า string เป็นพารามิเตอร์ (parameter) ไปให้กลับ function


ถ้าหากเราต้องการเชื่อม items ใน list เฉยๆ เราก็สามารถทำได้ด้วยการใช้ empty string ในการ join ดังตัวอย่าง


>>> ''.join(a)

'applebananacow'


ซึ่งก็จะเป็นสิ่งที่เราต้องการพอดี


ถึงตรงนี้ เราก็มีทุกอย่างพร้อมแล้วสำหรับการเรียกใช้ฟังก์ชันที่มากับ python แทนที่จะต้องมาเขียนเอง (ในเมื่อ python มีมาให้แล้ว เราจะเขียนเองให้ยุ่งยากทำไม จริงไหมครับ)

def reverse_sequence(dna):

____result = list(dna)

____result.reverse()

____result = ''.join(result)

____return result

Chain of functions


จะเห็นว่าฟังก์ชันใหม่ของเรา จะเรียกใช้ฟังก์ชันของ python ที่มีอยู่แล้วทั้งหมด คราวนี้เรามาเรียนรู้ concept อีกอย่างหนึ่ง ซึ่งจะทำให้เราเขียนโปรแกรมให้กะทัดรัดขึ้น แต่อาจจะทำให้มือใหม่งุนงงได้พอสมควร นั่นคือ concept เรื่อง chain of functions ครับ


เรามาดูตัวอย่างง่ายๆ กันก่อน สมมติว่าเรามี 2 functions ดังนี้ครับ

def function_addone(x):

____return x+1

def function_timetwo(x):

____return x*2

คิดว่าคงเข้าใจได้ไม่ยากนะครับ function_addone จะคืนค่าที่ส่งไปบวกหนึ่ง ส่วน function_timetwo จะคืนค่าที่ส่งไปคูณสอง


ลองมาดูตัวอย่างการใช้งานนะครับ


>>> function_addone(2)

3

>>> function_timetwo(2)

4


คราวนี้เราเอาผลลัพธ์มาใส่ไว้ในตัวแปร x ก่อน แล้วเอาผลลัพธ์ที่ได้ ไปใช้ใน function_timetwo ต่อ แล้วพิมพ์ผลลัพธ์ออกมาดู


>>> x = function_addone(3)

>>> x = function_timetwo(x)

>>> print x

8


จะเห็นว่าค่าของ x เป็นค่าที่ได้จากการคืนค่าของ function_addone แล้วค่านั้นก็จะถูกส่งต่อไปที่ function_timetwo ทันที เท่ากับว่าเรียกใช้ฟังก์ชันเพื่อให้ได้คำตอบของสมการ (3+1)*2 = 8 เราจึงอาจจะเขียนได้ดังด้านล่าง

>>> x = function_timetwo(function_addone(3))

>>> print x

8


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


เพราะฉะนั้น ถ้าเมื่อไหร่เราเห็นการเขียนโปรแกรมในลักษณะที่ส่งค่าต่อไปเรื่อยๆ เราสามารถย่อโปรแกรมได้ด้วยการใช้ chain of functions


ย้อนกลับมาที่โปรแกรมของเรา จะเห็นว่าเราน่าจะใช้ chain of functions ได้ ยกเว้นคำสั่ง reverse() ซึ่งไม่ได้คืนค่าใดกลับมา แต่คำสั่งนี้ไป reverse ข้อมูลของ list ทำให้เรายังไม่สามารถใช้ chain of functions ได้ เราสามารถแก้ไขได้ด้วยการใช้คำสั่งอีกหนึ่งคำสั่งที่คล้ายกันคือ


reversed() ให้สังเกตตัว d ที่อยู่ข้างหลัง ที่จะแตกต่างจากคำสั่ง reverse ที่เราใช้ก่อนหน้านี้


คำสั่ง reversed() จะคืนค่ากลับมา เราจึงเขียน function ได้ใหม่ ดังนี้

def reverse_sequence(dna):

____result = list(dna)

____result = reversed(result)

____result = ''.join(result)

____return result


ให้สังเกตการเรียกใช้ที่เปลี่ยนไป จะเห็นว่าคราวนี้ค่าสั่ง reversed จะคืนค่ากลับมาให้ เราจึงสามารถนำค่าที่ได้ใส่กลับลงไปที่ตัวแปร result ต่างจากที่เราใช้คำสั่ง reverse() ก่อนหน้านี้

เมื่อเราได้รูปแบบดังนี้แล้ว เราก็พร้อมจะใช้ chain of functions แล้วครับ โดยเราจะค่อยๆ ย้อนจากล่างขึ้นบน

def reverse_sequence(dna):

____result = list(dna)

____result = ''.join(reversed(result))

____return result


ผมเอา reversed(result) มาแทนที่ result ในบรรทัดที่ใช้คำสั่ง join เพราะเมื่อเราได้ผลลัพธ์จาก reversed(result) เราก็ส่งต่อค่านี้ไปที่ join ทันที จึงไม่จำเป็นต้องมาพักค่าเอาไว้ที่ตัวแปร result เราจะรวบคำสั่งต่อ ได้เป็น

def reverse_sequence(dna):

____result = ''.join(reversed(list(dna)))

____return result


ผมแทนที่ result ในบรรทัด join ด้วย list(dna) เพราะว่าตัวแปร result ที่จะมาที่บรรทัดนี้ก็คือผลลัพธ์ที่ได้จาก list(dna) จึงไม่จำเป็นต้องพักค่าเช่นกัน


สุดท้ายเราไม่จำเป็นต้องเก็บค่าในตัวแปร result อีกต่อไป เราสามารถ return ค่าได้เลย จึงได้ฟังก์ชันสุดท้ายเป็น

def reverse_sequence(dna):

____return ''.join(reversed(list(dna)))

ครั้งนี้เราจะจบที่ฟังก์ชันนี้ก่อนนะครับ เราได้เรียนคำสั่งเพิ่มเติมหลายคำสั่ง สามารถเปลี่ยน string ให้เป็น list และเปลี่ยน list ให้เป็น string ได้ และได้เรียนรู้ concept เรื่อง chain of functions ได้แล้ว ฟังก์ชันใหม่ที่เราได้ มีแค่ 1 บรรทัดเท่านั้น ครั้งหน้า เราจะมาดูกันว่า function complement ที่เราได้เขียนไปนั้น จะปรับปรุงให้ดีขึ้นได้อย่างไร