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 ที่เราได้เขียนไปนั้น จะปรับปรุงให้ดีขึ้นได้อย่างไร


Book Reviews

Introduction to Genomics

หนอนหนังสือ


Book Review ฉบับนี้ ผมขอแนะนำหนังสือดีเล่มหนึ่งครับชื่อ “Introduction to Genomics” ของ Arthur Lesk ครับ หนังสือเล่มนี้จัดว่าเป็นหนังสือที่เหมาะกับผู้ที่ไม่มีความรู้เรื่อง genomics (แต่ต้องมีความรู้ทางชีววิทยามาบ้างนะครับ) ไปจนถึงผู้ที่มีความรู้ทาง genomics ในระดับกลางเลยทีเดียว จุดเด่นของหนังสือเล่มนี้ คือ การใช้ภาษาที่ง่าย เรียงลำดับเนื้อความได้กระชับ ไม่เยิ่นเย้อ และส่วนที่เป็นความรู้ทางอณูพันธุศาสตร์ (molecular genetics) ก็จะแสดงด้วยภาพประกอบึ่งช่วยให้ผู้อ่านเข้าใจเนื้อหาได้ง่าย


เนื้อหาในหนังสือแบ่งออกเป็น 7 บท เริ่มจากบทที่ 1 ซึ่งว่าด้วย genomics ขั้นเริ่มต้น ในส่วนนี้ผู้เขียนยกตัวอย่างการทำจีโนมมนุษย์มาเป็นตัวอย่างประกอบการอธิบาย โดยจะเล่าเรื่องราวตั้งแต่อณูชีววิทยา (molecular biology) ขั้นพื้นฐาน จากนั้นก็เข้าสู่เรื่องราวของ human genome project และเชื่อมโยงกับการนำความรู้ด้าน bioinformatics เข้ามาใช้ในงานด้าน genomics ได้ในส่วนไหนบ้าง ในบทที่ 2 จะเป็นเนื้อหาเกี่ยวกับ comparative genome โดยจะเริ่มอธิบายจีโนมของสิ่งมีชีวิตต่างๆ ตั้งแต่ไวรัส prokaryotes ไปถึง eukaryotes และยกตัวอย่างการเปรียบเทียบจีโนมมนุษย์กับลิงชิมแพนซี และ การเปรียบเทียบจีโนมหนู mouse และหนู rat


บทที่ 3 และ 4 จะเป็นเนื้อหาในส่วนที่สองของเล่ม โดยบทที่ 3 จะว่าด้วยเรื่องของวิวัฒนาการของจีโนม โดยเริ่มปุพื้นฐานตั้งแต่ความหมายของคำว่า species และ systematic biology เบื้องต้น จากนั้นก็เข้าสู้เรื่องราวของ phylogenetic หลักการของ phylogenetics โดยยกตัวอย่างเป็น phylogenetic ของ prokaryotes และตอนท้ายของบทก็พูดถึง metagenomics และ phylogenetics ของ eukaryotes บทที่ 4 เป็นเรื่องของการวิเคราะห์ข้อมูลหลังจากที่เราได้ genome sequence มาจากห้องปฏิบัติการแล้ว เนื้อหามีตั้งแค่การค้นข้อมูลผ่าน database การทำ genome mapping การ annotate เพื่อดูว่ายีนที่เราสนใจมีหน้าที่อย่างไร


ส่วนสุดท้ายของหนังสือมี 3 บทครับ ในส่วนนี้ ผู้เขียนได้ให้ความรู้ที่กว้างออกไปจาก genomics ครับ แต่ก็ยังคงมีความเกี่ยวข้องกับ genomics อยู่ และเป็นส่วนสำคัญต่อการศึกษา genomics ในอนาคต โดยเนื้อหาในบทที่ 5 จะเป็นเรื่อง microarrays โดยจะเน้นไปทางด้านการวิเคราะห์ข้อมูลที่ได้จาก microarray และยกตัวอย่างการวิเคราะห์ข้อมูลในแมลงหวี่และยีสต์ (Saccharomyces cerevisiae) และส่วนท้ายของบทยังได้แทรกการประยุกต์ใช้งาน microarray ทางการแพทย์อีกด้วย เนื้อหาใน บทที่ 6 จะเป็นเรื่อง proteomics เนื้อหาว่าด้วยเทคนิคการแยกโปรตีนและการวิเคราะห์โปรตีน ทั้งแบบ electrophoresis และ protein modeling รวมไปถึง protein design ด้วย บทที่ 7 เป็นเรื่อง systems biology ซึ่งจะเน้นเรื่อง protein-protein interaction และ protein-DNA interaction และยกตัวอย่างการศึกษา systems biology ในแบคทีเรีย E. coli และยีสต์ S. cerevisiae ประกอบในช่วงท้ายด้วย


หนังสือเล่มนี้ยังได้รับการโหวดให้เป็นหนังสือดีระดับ 5 ดาว ในเว็บไซต์ Amazon.com อีกด้วย เห็นอย่างนี้แล้วไม่ต้องลังเลแล้วล่ะครับ ใครที่กำลังมองหาหนังสือ genomics ดีๆ สักเล่มหนึ่ง ผมขอแนะนำเล่มนี้ไว้ในรายการด้วยสักเล่มนะครับ

Meeting & Conference

Thai Bioinformatic Meeting ครั้งที่ 1

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


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


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


พี่ๆ น้องๆ ทีมงาน THAI Bioinformatics e-magazine ได้ทำงานร่วมกันมาเกือบจะ 1 ปีแล้ว แต่ก็ยังไม่เคยมีโอกาสมาพบหน้าคร่าตากันอย่างพร้อมเพรียงเลยสักที จุดประสงค์หลักของการพบกันคราวนี้ (ก้อยแอบไปรู้ข่าวมาจากวงในมาค่ะ) ก็คือให้ทีมงานได้มาเจอหน้าและแลกเปลี่ยนทัศนะ ข้อคิดเห็นต่างๆ รวมทั้งสรุปงานว่าในช่วงเวลาที่ผ่านมาเราได้ทำอะไรไปบ้าง และระดมความคิดว่าพวกเราควรจะทำอะไรต่อไป เพื่อให้เกิดประโยชน์กับเพื่อนสมาชิกผู้อ่านวารสารมากที่สุด งานนี้ บก. ของเราเตรียม powerpoint มานำเสนอความเป็นมาและการทำงานที่ผ่านๆ มาของพวกเราด้วยค่ะ แต่เนื้อหามีอะไรบ้างพี่เค้ายังขออุบไว้ก่อนค่ะ


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


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


จากนั้น บก. ของเราก็กาง notebook ออกมาพรีเซ้นต์ให้พวกเราฟังกันค่ะ (แอบได้ข่าววงในมาอีกแล้วค่ะ ว่าทำ slide เพิ่งเสร็จร้อนๆ คืนก่อน meeting เองนะคะ งานนี้เนื้อหา update สุดๆ) พี่ บก. เล่าย้อนตั้งแต่ก่อนที่จะมาเป็น THAI Bioinformatics อย่างทุกวันนี้ เรามีความเป็นมากันอย่างไร เพราะบางคนอาจจะไม่เคยทราบว่า ก่อนหน้าที่จะมาเป็น e-magazine ที่มีรูปเล่มเป็น PDF file ให้เราได้หา download กันแบบนี้ ช่วงแรกๆ ที่เรารวมกลุ่มกันก็แค่ต้องการรู้จักกัน รวมตัวกัน ว่ามีใครทำงาน หรือสนใจงานด้าน bioinformatics บ้าง เผื่อว่าเวลามีปัญหาติดขัดอะไร หรือมีอะไรต้องการจะ update จะได้แลกเปลี่ยนข้อมูลข่าวสารกัน ตอนนั้นเป็นแค่กลุ่มอีเมลเฉยๆ แต่จากจุดเริ่มต้นเล็กๆ นี้ เราก็เริ่มเติบโต (ตามวัย) จนมาเป็น e-magazine ในรูปแบบ PDF file และมีการปรับปรุงรูปแบบของวารสารออนไลน์ให้ดีขึ้นเรื่อยๆ จนเป็นอย่างที่เพื่อนๆ สมาชิกเห็นอยู่นี่แหละค่ะ นอกจาก e-magazine แล้วเรายังมี blog ที่คอย update ข้อมูล และตอบข้อข้องใจของเพื่อนๆ เกี่ยวกับความรู้ทาง bioinformatics และสาขาวิชาใกล้เคียงอีกด้วย ต่อมาทีมงานก็ได้เล็งเห็นว่า facebook เป็นกลยุทธ์หนึ่งในการผลักดันให้ THAI Bioinformatics เข้าถึงกลุ่มเป้าหมายและผู้สนใจมากขึ้น เราก็ได้จัดทำ facebook ของ THAI Bioinformatics Network ขึ้นโดยมีน้องฝน เป็น admin หลักและตอนนี้ก็มีก้อยเข้ามาเป็น admin ร่วมด้วยอีกคนค่ะ


หลังจากทำงานหนักกันมา (สังเกตได้จาก พี่ บก. ของเรา) จนวารสารของพวกเราจวนเจียนจะครบ 1 ขวบปีแล้ว ทีมงาน THAI Bioinformatics ก็มีแผนจะปรับปรุงนิตยสารกันหลายขนานเลยทีเดียว (มันก็ต้องมีพัฒนาการกันบ้างเนอะ) ทั้งด้านการเปลี่ยนแปลงรูปเล่ม ปก ภาพประกอบภายในเล่ม ส่วนเนื้อหาก็จะเติบโตไปพร้อมๆ กันพวกเราด้วย ก็อยากให้ติดตามอ่านกันดูนะคะ ว่าเราจะปล่อยของ (เด็ด) กันช่วงไหน บอกคร่าวๆ ว่าเราจะมี special issue ให้อ่านตาม trend ที่ฮิตๆ ในโลกของ bioinformatics กันด้วยค่ะ จะได้ไม่ out มากันแบบเจาะลึก ให้อ่านกันแบบจุใจเลยทีเดียวเชียว หลายคนอาจจะยังไม่รู้ว่า การจัดทำ special issue แต่ละครั้งนั้น ต้องระดมคนมาเขียนเนื้อหาหลายคนอยู่ ต้องหาท่านผู้ทรงภูมิในแต่ละหัวข้อมาเล่าเรื่องยาก ให้เป็นเรื่องง่าย ไม่รู้ว่าจะติดต่อขอร้องแกมบังคับท่านจอมยุทธเหล่านั้นได้ครบหรือเปล่า แต่อย่างไรก็ตาม เราจะใช้ทั้งกำลังภายใน และกำลังภายนอก (ข่มขู่) เอาบทความดีๆ มาเสิร์ฟให้ถึงหน้าเครื่องคอมพิวเตอร์กันเลยนะคะ


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


ต่อมาเราก็คุยกันในเรื่องโฆษณาในเล่มค่ะ เราเริ่มจัดทำโฆษณาเพื่อนำไปลงในวารสารอื่น และจัดเตรียมโปสเตอร์เพื่อการประชาสัมพันธ์ network ด้วย นอกจากนี้ยังเปิดโอกาสให้บุคคลภายนอกและองค์กรต่างๆ ร่วมลงโฆษณาในวารสารของเราด้วย และเรื่องเด็ดที่ บก. แย้มออกมาก่อนจบการประชุมของเรา ก็คือ เราได้ซื้อ domain name ของกลุ่มมาแล้ว ซึ่งก็ได้รับความอุปการคุณด้านกำลังทรัพย์จากพี่ประพัฒน์ นั่นเอง นั่นหมายความว่า เรากำลังจะมีเว็บไซต์เป็นของตัวเองในเร็วๆ นี้แหละค่ะ


นอกจากนี้ ทีมงานของเรายังคงต้องการนักเขียนหน้าใหม่อีกมาก ทั้งที่อยากเขียนคอลัมน์ประจำหรือคอลัมน์เฉพาะกิจก็ได้ ใครสนใจอยากมาร่วมงานกับเราหรือมาเป็นส่วนหนึ่งของเรา ก็ติดต่อมาได้ที่นี่นะคะ (thaibioinfo@gmail.com) พวกเราพร้อมจะให้การต้อนรับเสมอค่ะ


สุดท้ายนี้ก็ขอขอบคุณทุกคนที่มาร่วมด้วยช่วยกัน ทำให้การรวมตัวจากคนกลุ่มเล็กๆ ไม่กี่คน ขยายตัวจนเป็นรูปเป็นร่างได้อย่างในปัจจุบัน การ meeting วันนี้เราใช้เวลาไม่นานมากนัก และหวังเป็นอย่างยิ่งว่าการ meeting ในครั้งหน้า ซึ่งอาจจะเป็นปีหน้า คงจะมีคนมารวมตัวเพิ่มขึ้นอีก มาช่วยกันเสริมทัพ THAI Bioinformatics Network ของเราให้แข็งแรงยิ่งๆ ขึ้นไปอีก ขอบคุณจากใจจริงๆ ค่ะ ^^