[Diary] Treasure from flood.

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

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

สำหรับผม ผมเองก็ได้สิ่งต่างๆมากมายเช่นกัน สิ่งที่ผมเรียกมันว่า “ขุมทรัพย์” ดังที่หัวเรื่องจั่วไว้ ขุมทรัพย์เหล่านั้นสำหรับผม มีอะไรบ้าง

1. หนังสือ – สำหรับหนอนหนังสือ อะไรจะน่าดีใจไปมากกว่าหนังสือดีๆซักเล่ม การเก็บบ้านหนีน้ำท่วม ทำให้ผมได้พบกับหนังสือเล่มนึง ที่ผมไม่เคยรู้เลยว่ามันอยู่ในบ้าน และครั้งหนี่งในชีวิต ผมจำได้ว่าผมอยากได้มันมาก แต่ด้วยความที่ยังไม่มีรายได้มากมาย ก็จำใจปล่อยให้โอกาสซื้อหนังสือเล่มนั้นหลุดลอยไป จนเพิ่งได้มาเห็นนี่แหละ ว่าแม่ผมได้มันมานานแล้ว แถมอยู่จนกล่องใส่เหลืองเลยด้วยซ้ำ (แต่ตัวหนังสือยังสวยงามเหมือนใหม่เหมือนเดิม) หนังสือเล่มนั้นคือ “Photo Art Exhibition | Our Beloved King ของ Anuchai Sechaunpatong” อาจจะนึกไม่ออกแต่ถ้าบอกว่าเป็นหนังสืออัลบัมภาพถ่าย “รูปที่มีทุกบ้าน” ของเมื่อหลายปีก่อน น่าจะอ๋อกัน

…หลังจากที่ได้อ่านแล้ว ชื่นใจมาก อ่านแล้วมีความสุขมากจริงๆ

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

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

3. ตัวตน – ผมเข้าใจและรู้จักตัวเองมากขึ้น ผมได้รู้ตัวว่าแท้จริงแล้ว “ผมเหมือนพ่อมาก” ความคิด ลักษณะนิสัย ฯลฯ หลายสิ่งที่ผมเคยบ่นหรือชอบแซวพ่อ ผมได้รู้ว่า “จริงๆแล้ว ผมก็เป็น” ผมเคยอ่านในหนังสือเรื่อง “วิชาสุดท้าย ที่มหาวิทยาลัยไม่ได้สอน” ถ้าจำไม่ผิดน่าจะเป็นบทของ Guy Kawasaki ก็บอกไว้ประมาณนั้น “จริงๆแล้วคุณเหมือนพ่อแม่ของคุณมากกว่าที่คุณคิด คำพูดคำจา ความรู้สึกนึกคิด หรือแม้แต่กลิ่น เมื่อคุณอายุเท่าเขาคุณจะเข้าใจ” ผมเชื่อเรื่องนี้หมดใจเลย

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

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

อีกเรื่องที่ผมได้ฝึกคือเรื่องการ “เอาใจเขามาใส่ใจเรา” ซึ่งก็ไม่ใช่ใคร พ่อ-แม่ ผมนี่แหละ เรื่องความรู้สึกและจิตใจไม่ใช่เรื่องที่เอาตรรกะมาจัดการได้เลย ความเป็นห่วงบ้านของเขา เอาระดับความสูงของน้ำมาจัดการไม่ได้เลย บ้านเขาใช้ทั้งชีวิตสร้างมา เป็นเรื่องยากจริงๆถ้าจะให้เขาย้ายออกไป นี่เป็นเรื่องที่ผมได้ตระหนักรู้ขึ้นมา จะให้ใครเขาทำอะไร ให้ลองคิดว่าเป็นตัวเองดู ว่าจะทำได้มั้ย ผมเกิดมาก็มีบ้านอยู่ จะตัดใจปล่อยมันแช่น้ำไว้ผมทำได้ แต่ของที่ผมซื้อเองจริงๆ ผมเก็บไว้เหนือน้ำเป็นอย่างดีอยู่สูงชนิดที่ไม่มีทางจะโดนน้ำได้ถ้าไม่ 2 เมตรครึ่ง …นั่นแหละ ของใครใครก็ห่วงแหละเนอะ ดังนั้นผมเองก็ได้ฝึกการคิดถึงใจคนอื่นขึ้นเยอะ บางทีก็ต้องยอมให้พ่อกลับมานอนบ้าน มาลำบากโดยที่เขาไม่จำเป็นและตัวเองก็ไม่สบายใจ แต่การพบกันครึ่งทางและเห็นอกเห็นใจเป็นสิ่งสำคัญในการอยู่ร่วมกันมากจริงๆ

จริงๆยังมีอีกหลายๆเรื่องที่คิดได้ตอนน้ำท่วม แต่ตอนนี้นึกออกแค่นี้ เรื่องที่ดีก็มีมาก เรื่องที่น่าเศร้า ความจริงอันโหดร้ายก็มี แต่ว่าพอไว้แต่เท่านี้ดีกว่า ท้ายที่สุดนี้อยากบอกว่า น้ำไม่ได้พัดแต่สิ่งเลวร้ายและเข้ามาทำร้ายเราอย่างเดียว แต่ก็ได้พัดพาสิ่งดี ข้อคิดดีๆมาให้เราด้วย ขึ้นอยู่กับว่าเราจะมองเห็นมั้ย “ธรรมชาติส่งบทเรียนมาให้เราเรียนรู้และปรับปรุงเสมอ ถ้าเรารู้ตัวและพัฒนาแก้ไขเราจะไม่เจ็บปวดอีกต่อไป แต่ถ้าเราเมินเฉยไม่สนใจ ธรรมชาติจะพัดพาบทเรียนที่หนักหนากว่ามาบอกเราจนกว่าเราจะแก้ไขและสนใจมัน” (จากหนังสือ เข็มทิศชีวิต) …เป็นกำลังใจให้ผู้ประสบภัยผู้อื่นด้วยนะครับ ฝันดีครับทุกคน :)

ธันวาคม 12, 2011 at 3:24 pm ใส่ความเห็น

ARC (Automatic Reference Counting) Part II

เอาละครับ ในเรื่องของ ARC ตอนที่ 1 ผมอธิบายคร่าวๆไปแล้วว่ามันคืออะไร มีดียังไง ใน Entry นี้ ผมจะลงลึกรายละเอียดของ ARC มากขึ้น เพื่อรีดเค้นประสิทธิภาพของ ARC ให้มันดียิ่งขึ้นไปอีก ใครอยากอ่านตอนเก่าอยู่ ดูที่นี่ได้เลยครับ

Part I : https://onoaonoa.wordpress.com/2011/10/15/arc-automatic-reference-counting-part-i/

เอาละครับ เริ่มกันเลย

ก่อนหน้านี้ ผมเคยเปรียบเทียบการใช้ ARC กับการลดหุ่น ซึ่งใช้การควบคุมอาหารเป็นหลัก ถ้าเรากินอาหารแต่พออิ่มไม่กินมากเกินไป ไม่กินเป็นบุฟเฟต์ เราก็ควรจะมีหุ่นสมส่วนไม่อ้วนไม่ผอม ซึ่งก็เหมือนกับการใช้ ARC แบบ default คือระบุเป็น strong type ทั้งหมด แน่นอนว่าโปรแกรมเราทำงานปกติ และโอกาสเกิด memory leak ก็ไม่น่าจะมี เพราะ ARC จะจัดการให้เราตามหลัก ถูกมั้ยครับ?

งั้น ลองคิดดูว่า เรากินแต่พออิ่มเหมือนเดิม ข้าวจานเดียว น้ำแก้วเดียว ผลไม้อีกจานนึงต่อมื้อ แต่เรากิน ข้าวขาหมู+เป๊ปซี่+ทุเรียน คุณยังคิดว่าเราจะผอมอยู่มั้ย? ไม่แน่นอน อาหารแคลลอรี่สูงเหล่านี้ไม่ช่วยให้คุณผอมได้แม้จะกินแค่พออิ่ม …ARC ก็เช่นกันครับ การที่เราจัดการตัวแปรแบบ strong ทั้งหมด  นั่นก็ทำให้ใน App เราใช้ memory เยอะในช่วงเวลา runtime เพราะค่าทุกค่าถูกเก็บไว้ตลอดและจะถูกปล่อยคืนเมื่อ App ปิดตัวลง นี่เป็นสาเหตุที่เราต้องจัดการ ARC แม้ว่ามันจะบอกว่าเป็น Automatic อยู่ก็ตาม

type ของ ARC หลักๆ คือ strong กับ weak ถ้าเรากำหนด type strong ให้กับตัวแปร สบายใจได้ว่า value ของตัวแปรนี้ จะไม่หายไปหรือเปลี่ยนไปเป็นอย่างอื่นแน่นอน ตราบที่ไม่เราไม่เป็นคนไปเปลี่ยนเอง แต่ข้อเสียก็คือ เปลือง memory เพราะจำค่านั้นๆตลอดเวลาที่แอพทำงาน และยิ่งกว่านั้นคือ “ทำให้เกิด memory leak ได้ด้วย”

…เป็นไปได้อย่างไร? แต่เป็นไปได้ครับ เช่นในกรณีที่มีการ reference หากับแบบ parent กับ child อย่าง delegate หรือ datasource ใน UITableView เป็นต้น ลองดูเคสนี้ครับ สมมุติว่า myTableView ระบุให้ ARC จัดการ “delegate, datasource แบบ strong ทั้งหมด” ลองนับดูนะครับว่า Object “MyArcLeak” ที่เราสร้างขึ้น จะมี retain count เท่าไหร่เมื่อโค้ดผ่าน -viewDidLoad ไป โดยเริ่มต้นจาก 1 จากการ allocate object


@implementation MyArcLeak
- (void)viewDidLoad {
[super viewDidLoad];
self.myTableView.delegate = self;     // retain count + อีก 1
self.myTableView.datasource = self;   // retain count + อีก 1
}

จะเห็นว่า object ที่เราสร้างขึ้นมี retain count กลายเป็น 3!! เมื่อ arc release object ที่เราสร้างขึ้น มันก็ลบ retain count ออกไป 1 เท่านั้น เห็นมั้ยครับว่าแม้จะใช้ ARC ก็ยัง Memory leak ได้อยู่ นี่เป็นเหตุผลที่เราต้องรู้จักการใช้ ARC ทั้ง strong และ weak

strong อธิบายไปแล้ว แล้ว weak เป็นอย่างไร? ผมบอกไปแล้วว่า weak type เป็น type ที่ค่าจะถูกเปลี่ยนเป็น nil ได้ตลอดเวลา ซึ่งตลอดเวลาที่ว่าคือ เมื่อ value ที่ weak variable ชี้ไปหาถูกเปลี่ยนไปเมื่อไหร่ weak variable จะถูกเปลี่ยนเป็น nil ทันที ลองดูโค้ดตามนี้ครับ


NSString *a = @"strong";
__strong NSString *b = a;
a = @"A is Strong";

ผลที่ได้คือ a => A is Strong และ b => strong

แต่ถ้า b เป็น weak type ผลที่ได้จะต่างออกไปดังนี้


NSString *a = @"strong";
__weak NSString *b = a;
a = @"A is still Strong";

ผลที่ได้จะเป็น a => A is still Strong และ b => nil

นี่แหละครับ ความต่างของ strong และ weak และจะต้องใช้แบบไหนยังไง สรุปแบบสั้นๆง่ายๆครับ

  1. ถ้าเป็นพวกที่เมื่อก่อน property assign เมื่อไหร่ ก็ใช้ __weak ครับ เช่น delegate, datasource
  2. ถ้าเป็นตัวแปรที่ reference จาก xib หรืออะไรก็ตามที่เป็น IBOutlet ให้ตั้งเป็น weak เสมอ เพราะ Object ถูก retain ด้วย IB อยู่แล้ว

หลักๆสองข้อเท่านี้แหละครับ หลักของการใช้ weak แบบทั่วไป แต่คราวนี้ยังมีิอีกอย่างที่ยังคงต้องพูดถึง ปัญหาอีกอย่างนึงที่ยังคงอยู่คือเรื่อง iOS4 กับ ARC ครับ

จริงอยู่ว่า ARC support iOS ตั้งแต่เวอร์ชั่น 4 ขึ้นไป เท่าที่ apple support iOS version จนถึงปัจจุบันนี้ แต่ข่าวร้ายคือ iOS4 ไม่ support ARC type แบบ weak ครับ วิธีการแก้ไขคือ เราต้องใช้ ARC type แบบ __unsafe_unretain แทน เท่านี้แหละครับใช้ได้แล้ว ดูเหมือนไม่มีปัญหา แต่จริงๆก็มีครับ unsafe_unretain ต่างกับ weak แค่ตรงที่ เวลาที่ value ต้นทางเปลี่ยน มันไม่เป็น nil ให้เหมือน weak ครับ

เพราะเหตุนี้เองมันถึงได้ unsafe ที่ว่าไม่ปลอดภัย เพราะการที่ pointer ชี้ไปตำแหน่งที่ไม่ถูกต้องตามค่าที่คาดการณ์ไว้นั้น อาจจะทำให้เกิดบั๊กที่เรียกว่า Dangling pointer และทำให้ application crash ตามมาใน worst case การแก้ไขคือเราก็ต้องตรวจสอบให้ดีๆ อาจใช้ tool ใน instrument หรือเปิด feature zombie เพื่อหาข้อผิดพลาดได้ครับ

เอาละครับ สำหรับเรื่อง ARC ตอนที่ 2 ผมก็ได้อธิบายเกี่ยวกับรายละเอียดของการใช้ ARC ทั้ง 3 type ที่จำเป็นและอาจจะได้เจอบ่อยๆ ได้แก่ strong, weak และ unsafe_unretain ซึ่งต้องเจอแน่ๆ 80% ในการพัฒนา iOS application ณ เวลานี้

จริงๆแล้ว ยังมีรายละเอียดอีกเกี่ยวกับ ARC เรื่อง เช่น bridge, การใช้ arc กับ block variable แต่ขอเก็บไว้ Entry หน้าแล้วกันครับ กลัวว่าจะหนักเกินไป หวังว่าจะสนุกกับการสร้างหุ่นสวยๆให้กับแอพของคุณด้วย ARC นะครับ …Happy  Coding ครับ ;)

พฤศจิกายน 12, 2011 at 6:22 am 4 ของความคิดเห็น

Movie : Top Secret วัยรุ่นพันล้าน

น่าจะเป็นเรื่องที่ผมเอามา Review เร็วที่สุด อารมณ์ว่า จบปุ๊บ Review ปั๊บ หนังเรื่องนี้อาจมีสปอยล์บ้างนะครับ

เรื่องนี้คงไม่ต้องอารัมภบทอะไรมากมาย เป็นที่รู้กันว่าเป็นเรื่องราวการสู้ชีวิตของ “ต๊อบ เถ้าแก่น้อย” สาหร่ายอบกรอบชื่อดังในประเทศไทย (และต่างแดน) คุณภาพหนังไม่ต้องพูดถึง ตามาตรฐาน GTH เลย ตื่นเต้นชวนติดตามตลอดเวลา ขนาดไม่ใช่หนังผีนะ ส่วนนักแสดง พีช ผมว่าเขาก็เล่นได้ดีนะ หนังเรื่องนี้รายได้จะไม่ถล่มทลายนักก็คงแค่เหตุผลเรื่อง “ฉายช่วงน้ำท่วม” เท่านั้นจริงๆ แต่ที่สนใจใน Review นี้คือ “ข้อคิด” ในเรื่อง ข้อคิดต่างๆที่อยู่ในเรื่อง ดังนี้ครับ

1. Sense เถ้าแก่ – ถึงแม้ต๊อบจะเป็นเด็กติดเกม ไม่สนการเรียน แต่ถึงกระนั้นก็มี Sense พ่อค้าอยู่ในตัว มองหาโอกาสและหาช่องทางทำธุรกิจได้ตลอดเวลา ติดเกมก็หาเงินจากเกม คิดถึงแฟนก็ทำธุรกิจจากสิ่งที่แฟนชอบ (เกาลัดและสาหร่าย) สิ่งเหล่านี้ ไม่มี Sense ก็ไม่มีทางคิดจะทำอยู่ดี

2. Common sense get common score – คำนี้เป็นคำที่อาจารย์สมัยมหาลัยของผม @rawitat สอนไว้ การเลือกทำสิ่งสามัญธรรมดาย่อมได้ผลลัพธ์อย่างธรรมดา (เหมือนการตอบข้อสอบ ตอบตามหนังสือเป๊ะ เกรดที่ได้ก็ควรเป็นเกรดธรรมดา เพราะไม่ก่อให้เกิดความรู้ใหม่) ต๊อบก็เช่นเดียวกัน เลือกเส้นทางที่ต่างไป ไม่ได้เรียนต่อแต่เลือกที่จะทุ่มเทกับเป้าหมาย (อาจเป็นเพราะเงื่อนไขในชีวิตด้วย ทำให้เลือกทางปกติไม่ได้) แม้จะเสี่ยง แต่ผลตอบแทนย่อมคุ้มค่ากว่าทางทั่วไปแน่นอน

3. Energy Conservation Law – กฎอนุรักษ์พลังงาน เรื่องของกฏที่ว่า “สิ่งใดๆที่เก็บกักพลังงานไว้ ไม่ว่าอย่างไรก็ตามถึงจุดๆนึงก็จะมีการปล่อยพลังงานออกมาเพื่อรักษาสภาพ ถ้าคล่อยๆปล่อยก็เรียกว่า คลายพลังงาน แต่ถ้าปล่อยครั้งเดียวออกมาหมดจะเรียกว่า ระเบิด” สิ่งเหล่านี้ไม่ได้อยู่แต่ในวัตถุเท่านั้นหรอกครับ มันอยู่ในทุกสิ่งแม้แต่ตัวเราเอง ลองนึกถึงคนที่อดทนกับเรื่องงี่เง่าขัดใจอะไรมานาน ยิ่งเก็บไว้นาน พอปล่อยออกมาที แทบนึกไม่ออกเลยว่าเขาเป็นคนอารมณ์-พฤติกรรมดุร้ายขนาดนี้ได้ยังไง นี่เป็นตัวอย่างจากที่ผมกล่าวอ้างว่า “กฎนี้อยู่ในทุกสิ่งแม้แต่คนเราเอง”

แล้วเกี่ยวกับหนังยังไง กว่าอะไรซักอย่างจะประสบความสำเร็จโด่งดังระดับประเทศ ผมนึกไม่ออกเลยซักอย่างว่า “อะไรบ้างที่ดังโดยไม่ติดลบมาก่อน” กว่าจะมี Apple ก็ต้องเริ่มจากโรงรถ โดนไล่ออกจากบริษัทที่ตัวเองตั้ง ฯลฯ, กว่าจะมี Facebook ก็ต้องเสียต้องแลกกับสิ่งต่างๆไปมากมาย เสียเพื่อน เสียเงินสู้คดี, และอีกหลายๆอย่างที่กว่าจะมีอยู่ได้จนถึงวันนี้ เถ้าแก่น้อยก็เช่นกัน กว่าจะมีได้ ต้องดิ้นรนต่อสู้กับภาระหนี้สินมหาศาล ล้มลุกคลุกคลานกับธุรกิจต่างๆมา

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

4. Good partner is a key for success – คนหนึ่งที่เป็น “บุคคลสำคัญ” ของเรื่องเลยคือ “ลุงเทิน” “ลุงเทือง(เปี๊ยก โปสเตอร์)” ลุงที่อยู่กับต๊อบ ช่วยต๊อบอยู่ตลอดเวลา เพื่อนดีเป็นสิ่งที่ขาดไม่ได้ในการประสบความสำเร็จ ผมเองก็นึกไม่ออกว่าบริษัทขนาดใหญ่ที่ไหนบ้างที่ตั้งได้โดยไม่มี Partner ชั้นเยี่ยมอยู่ข้างกัน Steve Jobs ก็มี Steve Wozniak ร่วมก่อตั้ง Apple มาด้วยกัน, Bill Gates ก็มี Steve Balmer ถึงได้มี Microsoft, Larry Page ก็มี Surgey Brin ถึงได้มี Google และเชื่อว่าถ้าอ่านชีวประวัติคนอื่นๆอย่างละเอียด ก็คงมี partner ด้วยกันทุกคน ดังนั้นปฏิเสธไม่ได้ครับว่าจะประสบความสำเร็จในสิ่งเหล่านั้น คุณต้องมี “Perfect Partner” อยู่ด้วย

5. ความอ่อนน้อมถ่อมตน + ความอดทน – คำสอนต่างๆเกี่ยวกับความอ่อนน้อมถ่อมตน เช่น “ฟันหักเพราะแข็ง ลิ้นงอเพราะอ่อน” หรือ “รวงข้าว ยิ่งอิ่มยิ่งค้อมตัวลงต่ำ” ในหนังก็เช่นกัน ต๊อบต้องรู้จักโอนอ่อนนอบน้อมและอดทนมาก จะทะเล่อทะล่าเข้าไปเสนอสินค้าไม่ได้ โค้มตัวลงต่ำ โดนติตำหนิก็พร้อมยอมรับและแก้ไข จึงทำให้คนให้ความเอ็นดูและให้โอกาส สิ่งนี้เป็นสิ่งสำคัญมากในการที่คนเราจะประสบความสำเร็จ “ความอ่อนน้อมและความตั้งใจ เป็นใบผ่านทางสำหรับโอกาส”

6. ความซื่อสัตย์ – เป็นฉากที่ผมชอบที่สุดและ Impact ที่สุดของเรื่องฉากนึงเลยก็ว่าได้ เรื่องของความซื่อสัตย์ ถ้าไม่โดน “ยาม” ด่าเรื่องพยายามยัดเงินให้เปิดห้างให้ต่อ มั่นใจมากว่าไม่มีทางผ่านการประเมินโรงงานได้แน่นอน การยัดเงินใต้โต๊ะเปรียบเหมือนการเอามือไปลูบหน้าคนรับ บางคนอาจคิดว่า “เขาเมตตาเอ็นดู” แต่บางคนก็คิดว่า “ดูถูกและลามปาม” ทั้งสองสิ่งคือการล้ำเส้นความสัมพันธ์ทั้งสิ้น แค่จะล้ำไปทางบวกหรือลบก็เท่านั้น แต่จะดีที่สุด ถ้าจะไม่ล้ำเส้นกันและเดินทางสายกลางเข้าไว้

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

ตุลาคม 29, 2011 at 1:23 pm ใส่ความเห็น

ARC (Automatic Reference Counting) Part I

สิ้นสุด NDA เกี่ยวกับ iOS SDK ซักที หลังจากนี้ คงมี Entry ใหม่ๆให้เขียนเยอะแยะเลยทีเดียว เรื่องที่จะคุยกันใน Entry นี้เป็นเรื่องทีเด็ดของ Objective-C เลยก็ว่าได้ คือเรื่องของ ARC ใน Entry มาทำความรู้จักกันพอสังเขปก่อนดีกว่า

ARC ย่อมาจาก Automatic Reference Counting ดังที่ทราบกันอยู่แล้วว่าการจัดการ Memory ใน Objective-C นั้น ใช้การนับ (Counting) การอ้างอิงถึง (Reference) ตัวแปรนั้นๆ ว่ายังสมควรจะอยู่ใน Memory อยู่มั้ย? ซึ่งก่อนหน้านี้เราต้องเป็นคนจัดการเอง(นับเอง เพิ่มเอง ลบเอง) แต่ด้วย ARC มันก็ทำให้เราโดยอัตโนมัติ เท่านั้นเอง คอนเซปต์ง่ายๆแค่นี้

ช่วงต้นปีที่ Xcode4 ออกมาใหม่ๆ มีการแนะนำ Compiler ตัวใหม่ชื่อว่า “LLVM” ซึ่งมีประสิทธิภาพและความสามารถสูงกว่า Compiler ตัวเก่า “GCC” อย่างมากมาย ทั้งความเร็ว, Error Message ที่ Programmer friendly มากกว่า, ฯลฯ ในช่วงแนะนำมีการนำเสนอหนึ่งในฟีเจอร์ของ LLVM เป็น Analyzer ที่ชื่อว่า Clang ผลการทำงานน่าประทับใจมาก สามารถแสดงผลทีละสเต็ปได้เลยว่า ตรงไหนจะ leak เริ่มจากไหนและจบตรงไหน แต่เคยสงสัยบ้างรึเปล่าว่า “ถ้าเก่งซะขนาดนี้ แล้วทำไมไม่แก้ให้ด้วยล่ะ” …นี่แหละครับ ที่มาของ ARC

ผมขอเปรียบให้ ARC เป็นเหมือนช่างซ่อมรถมือโปรมองรถคุณปราดเดียวรู้เลยว่า “ตรงนี้เครื่องหลวมนะ ตรงนั้นต้องซ่อมนะ” ถ้าเป็นรถคุณ คุณก็คงบอกว่า “งั้นพี่ซ่อมให้ผมไปเลยก็แล้วกัน” แต่ ARC กลับตอบกลับว่า “ไม่ได้เอาเครื่องมือมา ลูกมือก็ไม่มี” …นี่เป็นคำตอบของคำถามข้างบนครับ ว่าทำไม ARC ไม่แก้ให้เราไปซะเลย

…แม้ว่า ARC จะขึ้นต้นด้วยคำว่า Automatic แต่ก็ไม่ได้หมายความว่า “เราไม่ต้องทำอะไรเลย” เราก็ยังควรรู้การ Programming เพื่อให้เข้ากับการทำงานของ ARC ได้อย่างเต็มที่เช่นกัน จากตัวอย่างข้างต้น ถ้า ARC กำลังซ่อมรถให้เราแต่เรามีแต่เครื่องมือมาตรฐาน ไขควงอันเดียว ประแจซักสามสี่เบอร์เท่าที่พอใช้ได้ การซ่อมรถของ ARC ก็คงได้ผลเท่าที่เครื่องมือพอจะอำนวยให้ได้

การมีอยู่ของ ARC ทำให้หน้าที่ของเราเปลี่ยนไป “เราไม่ต้องระวังเรื่อง Memory Leak อีกต่อไป แต่การ Optimize ยังคงเป็นหน้าที่ของเราอยู่”

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

แต่ถ้าคุณใช้ ARC Programming ก็เปรียบเสมือน คุณอาจมีการวัด BMA ของแฟนคุณ ดูกรุ๊ปเลือดว่าควรกินอะไรไม่ควรกินอะไร ลักษณะร่างกาย ฯลฯ และออกแบบเมนูสำหรับเขาโดยเฉพาะเลย ผลก็คือ แฟนคุณก็จะมีหุ่นสวยเป็น S Shape ไปเลยก็ว่าได้ (ตัวอย่างก็ประมาณนี้ เรื่องจริงจะเป็นไง ผมไม่รู้นะครับ ฮาๆๆ)

คำถามต่อมาก็คือ แล้วมันต่างจาก Garbage Collector (GC) ยังไง : ความแตกต่างก็คือ ARC ทำงานในช่วง Compile Time ในขณะที่ GC ทำในช่วง Runtime อย่างที่บอกว่า ARC เข้ามาเสริมในขั้นตอนของการ Analyze ให้แก้ได้ด้วย ดังนั้น สิ่งที่ ARC ทำก็คล้ายๆกับการเติม Retain/Release/Autorelease ในโค้ดให้เราตามที่มันเห็นสมควรเท่านั้นเอง (แม้ว่าจริงๆจะไม่ใช้แบบนั้นซะทีเดียว แต่ก็พอจะเข้าใจแบบนั้นได้) จากนั้นก็ทำงานไปตามปกติ ต่างจาก GC ที่ไล่เช็คตัวแปรในโปรแกรมไปเป็นช่วงๆว่าอันไหนใช้อยู่ อันไหนไม่ใช้ แล้วก็ค่อยเคลียร์ไปเป็นรอบๆไป

เราจะเริ่มต้น ARC ได้อย่างไร? : สิ่งแรกที่เราต้องเปลี่ยนคือ “แนวคิด” ในการจัดการตัวแปร จากเมื่อก่อนเราคิดตามกฎง่ายๆว่า “alloc/retain เอง ก็ release ด้วย” และ “ถ้าไม่ได้ alloc/release เองก็ไม่ต้องทำอะไร” ตอนนี้เราต้องเปลี่ยนเป็น “อะไรสำคัญให้ strong นอกจากนั้นว่ากันอีกที” แล้วครับ

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

จากที่กล่าวไปข้างต้น คิดว่าคงพอจะเห็นภาพรวมกว้างๆ และความจำเป็นของ ARC กันบ้างแล้ว คราวนี้มาดูการใช้งานกันคร่าวๆ

Property Type ของ ARC หลักๆ ก็มีใช้อยู่ 4 แบบ คือ __strong, __weak, __unsafe_unretain และ __autoreleasing แต่ละตัวเป็นการกำหนดลักษณะของ ตัวแปรแต่ละอย่าง

  • __strong คือ ตัวแปรนั้นต้องมีการเก็บค่าเอาไว้ตลอดเวลา จะใช้ตอนไหนต้องเรียกได้ เพราะว่า “สำคัญ” นั่นเอง
  • __weak หมายถึงตัวแปรนั้นพร้อมที่จะมีการ release อยู่ตลอดเวลา (Zeroing) และค่าในตัวแปรนั้นก็พร้อมจะเป็น nil ตลอดเวลาเช่นกัน
  • __unsafe_unretain คล้ายๆกับ weak ต่างกันตรงที่ตัวแปรนั้นจะไม่พร้อม release (Non-Zeroing)
  • __autoreleasing คล้ายๆกับ autorelease แบบเก่า ตัวแปรจะเก็บลงใน autorelease pool เพื่อรอการ release แต่โดยปกติแล้วไม่ค่อยใช้

การใช้งานโดยปกติแล้ว ถ้าไม่ระบุอะไรเลย จะเป็นการกำหนดว่าใช้ strong โดย default ถ้าเราไม่กำหนดอะไรเลย เท่ากับว่าตัวแปรทุกตัวใน app เราก็จะเป็น strong ทั้งหมด ทั้งแอพเราก็จะบริโภค memory ตามที่ต้องการ ถ้าเปรียบเทียบกับหุ่นแฟนก็เป็นหุ่นมาตรฐานตามที่ยกมาก่อนหน้านี้นั่นเอง

การกำหนด Property ให้กับตัวแปร ก็ไม่มีอะไรมาก เปลี่ยนจากที่เคยกำหนดว่าเป็น retain, copy, assign มาเป็น strong หรือ weak เท่านั้นเอง ส่วนจะเป็นค่าไหน ก็ตามที่บอกจากส่วนแนวคิด อะไรสำคัญหายไม่ได้ก็ strong อันไหนไม่สำคัญหรือมีการเปลี่ยนแปลงหรือเป็น nil ได้ ก็ weak แค่นี้เอง syntax สำหรับ class instance ก็จะลักษณะนี้

@interface Class : UIViewController
@property (strong, nonatomic) NSArray *essentialDatasource;
@end

ส่วน local function จะเป็นแบบนี้

__strong NSString *requiredParameter = @"&id=1234";
__weak NSString *optionParameter = @"&format=xml";
MyClass *isStrongByDefault = [[MyClass alloc] init];

จากตัวอย่างข้างต้นนะครับ ลักษณะก็จะประมาณนี้ ไม่ต้องมีการ retain, release หรือ autorelease ใดๆทั้งสิ้น จะ alloc ก็ alloc ไปครับ เพราะ ARC  จะไปหาที่ release ที่เหมาะสมให้กับเราเอง สิ่งที่เราต้อง focus ก็คือตรงไหนสำคัญไม่สำคัญมากกว่า …เท่านี้เองครับ

สำหรับ โปรเจคเก่าๆ Xcode ก็มีเครื่องมือในการ Covert ไปเป็น ARC อยู่ใน Edit->Refactor->Convert to ARC อยู่แล้ว ถ้าครั้งแรกยังไม่ผ่านก็ไม่ต้องตกใจครับ แก้ไขไปเรื่อยๆตามที่ Error ขึ้น ส่วนมากก็แค่ให้ลบที่เราเคย release, autorelease ไว้เท่านั้น แถมถ้าแก้ไม่ถูก ยังมี fix-it ให้ใช้อีกตะหาก …แทบไม่ต้องทำอะไรแล้วเนี่ย

สำหรับ Entry นี้ ขอเบรคไว้เท่านี้ก่อน ส่วนรายละเอียดอื่นๆ เช่น รายละเอียดเกี่ยวกับ Type weak, การ Bridge ค่า ฯลฯ ที่จะเป็นการลงลึกมากกว่านี้ ไว้ว่ากันใน Entry หน้าครับ Happy Coding with ARC ครับ :)

อ่านต่อเนื้อหาได้ที่

Part II : https://onoaonoa.wordpress.com/2011/11/12/arc-automatic-reference-counting-part-ii/

ตุลาคม 15, 2011 at 1:31 am 4 ของความคิดเห็น

Objective-C Coding Style : Naming

“ภาษา” เป็นสิ่งที่ถูกประดิษฐ์ขึ้น เพื่อสื่อสารระหว่างกัน ภาษาไทย, ภาษาอังกฤษ, ภาษามือ, ภาษากาย ฯลฯ ล้วนแล้วแต่เป็นสิ่งที่ถูกประดิษฐ์ขึ้นเพื่อการสื่อสารทั้งสิ้น รวมทั้ง “ภาษาโปรแกรมมิ่ง” ก็คือสิ่งที่โปรแกรมเมอร์ใช้สื่อสารกับคอมพิวเตอร์เช่นเดียวกัน แต่นอกเหนือจากนั้น มันก็เป็นภาษาที่สื่อสารระหว่างโปรแกรมเมอร์เช่นเดียวกัน

สิ่งที่ผมเกริ่นมาข้างต้น คือความสำคัญของหัวเรื่องเรื่องนี้ เรื่อง Coding Style ของ Objective-C จริงๆเรื่องของ style มันเป็นของใครของมัน แต่ใน Entry นี้ผมขอโฟกัสกับ style ที่ “พึงกระทำด้วยประการทั้งปวง” การที่โค้ดของคุณอ่านง่ายเข้าใจง่ายไม่ซับซ้อน หรือที่ฝรั่งเรียกว่า “Clean Code” นั้น ช่วยเพิ่มประสิทธิภาพการทำงานเป็นทีม การลดเวลาการทำงานของคนที่มาทำงานต่อจากคุณ(เช่นการแก้บั๊ก) และง่ายต่อการ Optimize, Refactor หรือประโยชน์อื่นๆทั้งปวงในกระบวนการ Software Development

ใน Entry นี้ผมขอ Cover แค่เรื่อง “การตั้งชื่อ” ในการเขียน Code ภาษา Objective-C เท่านั้นนะครับ จริงๆเรื่องมันเล็กมาก มากจนผมไม่เคยคิดว่าจะมีคนทำด้วยซ้ำ แต่กระนั้น …ผมก็เจอกับตัวเองมาทุกเคส (จนต้องมาเขียนบลอกนี่แหละ) …แต่อย่างที่บอกว่าเรื่องของ Style เป็นเรื่องส่วนบุคคล มีแค่บางข้อเท่านั้นที่ผมอยากระบุเลยว่า “ควรทำตาม” แต่บางข้อก็ “แล้วแต่คุณ” ว่าแล้วก็ไปดูกันเลย

ใน Objective-C การตั้งชื่อตัวแปรโดยรูปแบบของคำ ควรเป็นลักษณะที่เรียกว่า “Camel Case” คือขึ้นต้นแต่ละคำในชื่อด้วยตัวพิมพ์ใหญ่ ส่วนตัวแรกจะเป็นพิมพ์ใหญ่ก็ต่อเมื่อเป็นชิื่อ Class เท่านั้น นอกนั้นขึ้นด้วยพิมพ์เล็กหมด เช่น MyClass, myAttribute, -(void)myFunctionWithParameter:(id)param เป็นต้น ข้อนี้จัดเป็นเรื่อง “พึงปฏิบัติตามด้วยประการทั้งปวง” แต่ข้อนี้ขอเพิ่มเติมว่า “เขียนภาษาไหนก็ตามแบบนั้นไป” ดีที่สุด

การตั้งชื่อตัวแปร หรือ attribute ของ Class ในภาษา Obj-C นั้น ถูกระบุในเอกสารของ apple อย่างชัดเจนว่า “ขึ้นต้นด้วยตัวพิมพ์เล็ก เสมอ!!” ใครที่กำลังติดนิสัยนี้อยู่ เปลี่ยนพฤติกรรมเถอะครับ เรื่องการตั้งชื่อเป็นเรื่องสามารถทำให้เกิดความเข้าใจผิดได้อย่างมากมาย เพราะการตั้งชื่อขึ้นต้นด้วยตัวพิมพ์ใหญ่ มันหมายถึง “ชื่อ Class” อันนี้เรื่องใหญ่ครับ ขอจัดความสำคัญอยู่ในระดับ “พึงปฏิบัติตามด้วยประการทั้งปวง”

ส่วนการตั้งชื่อโดยใช้ _(Underscore) ในการเติมด้านหน้าหรือต่อท้าย เป็นเรื่องที่ “ทำได้” ครับ เป็นการป้องกันการเรียกใช้ตัวแปรที่ชื่อซ้ำกันได้ เช่น tableView ที่เป็น attribute กับ tableView ที่เป็นค่าที่ return มาจาก delegate method หรืออาจใช้เพื่อระบุว่าเป็น class attribute เจาะจงว่าเป็น private class attribute แบบนี้ก็ยังโอเคครับ ไม่ผิดกฎอะไรใดๆ และเป็นที่ใช้กันอยู่ทั่วไป

เรื่องก้ำกึ่งอยู่เรื่องนึงเกี่ยวกับการตั้งชื่อคือเรื่องการ “ย่อ” เรื่องนี้อยากจะบอกถึงน้องๆที่เริ่มเขียนโปรแกรมลงไปเลยด้วยซ้ำ ว่า “อย่าติดนิสัยการตั้งชื่อโดยไม่สื่อความหมายเลยครับ” ไอ้ int a, bool b, char *c เนี่ย หยุดเถอะครับ โอเคว่ามันไม่ใช่กฎ แต่เรียกว่าเป็น “มารยาท” ก็แล้วกันครับ จะมียกเว้นไว้บ้างบางตัวก็ถ้าเป็น i แล้ววนลูป อันนี้เชื่อว่าเป็น de-facto (หมายถึงมาตรฐานที่รู้ๆกันทั่วไป) แต่ผมก็ใช้ idx มากกว่านะ อันนี้ก็แนะนำว่า ชื่อยาวนิด แต่สื่อความหมาย ดีกว่าสั้นกุดแต่ไม่รู้ห่าอะไรเลยครับ”

…นี่แหละครับ หลักๆของการตั้งชื่อในภาษา Objective-C แค่นี้เอง ง่ายมาก บางคนอาจไม่เข้าใจเพราะคุ้นกับภาษาอื่นมากกว่า เลยติดมา อันนี้ก็คงต้องปรับตัวให้เหมาะสมกับงานที่ทำและภาษาที่ใช้ไปนั่นแหละครับ ส่วนใครที่เริ่มหัดเขียนก็เริ่มฝึกให้ถูกต้องนะครับ

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

สิงหาคม 17, 2011 at 4:33 pm 2 ของความคิดเห็น

[Diary] เมื่อต้องมาเป็น “อีสุกอีใส” เอาตอนแก่…

…ตามหัวเรื่องครับ ตอนที่เขียนอยู่ตอนนี้ก็กำลังเป็นอยู่เลย มาเป็นเอาตอน 25 เนี่ย ช่วงนี้ลางาน พักรักษาตัวว่างๆอยู่ ก็เลยเขียนบลอกแนะนำแบบประสบการณ์ตรงเป๊ะๆ เผื่อมีคนต้องชะตากรรมเดียวกัน อยากหาข้อมูลไว้ เผื่อจะมีประโยชน์บ้าง เริ่มเลยแล้วกันครับ

โรคนี้เป็นโรคที่เกิดจาก “ไวรัส” ครับ ไวรัสชื่ออะไรจำไม่ได้ บอกไปก็คงจำไม่ได้กันอยู่ดี(และผมก็ไม่ได้จำด้วยสิ) ลอยอยู่ในอากาศครับ ทุกคนมีโอกาสเป็นได้ ไม่ว่าจะปฏิบัติตัวอย่างไรก็ตาม โอกาสมากน้อยมันแล้วแต่ดวงเท่านั้นเอง สำหรับโรคนี้จะให้ความรู้สึก “โคตรแย่” สำหรับผู้ใหญ่วัยโตแล้ว ไม่ใช่เพราะอาการป่วยมันหนักหนาอะไรมากมาย แต่ “แผลเป็น” ตะหากที่มันทิ้งไว้ให้กับชีวิตอย่างยาวนาน

ส่วนมากโรคนี้จะเป็นกันตั้งแต่เด็กๆ ตอนโตๆกันมาเลยไม่เป็นกันแล้ว ตัวผมเด็กๆไม่เป็นครับ เพราะเด็กๆแม่ใช้วิธี “ฉีดวัคซีน” ป้องกันไว้แต่เด็ก แต่ทว่า วัคซีนฉีด 1 เข็ม สามารถป้องกันได้ประมาณ 20 ปี ครับ เคสผมนี่ก็เรียกได้ว่า “หมดประกันปุ๊บเจ๊งปั๊บ” เลยก็น่าจะได้ ดังนั้นใครฉีดวัคซีนตอนเด็ก ก็อย่าลืมไปกระตุ้นกันนะครับ แล้วก็… โรคนี้ถึงเคยเป็นแล้วก็เป็นได้อีกนะครับ แต่โอกาสจะเป็นได้ยากกว่าเดิม (อันนี้คุณหมอบอกผมมาเองเลย) อย่าได้วางใจไปนัก บางคนเป็นเบิ้ลทั้งตอนเด็กตอนโตก็มีครับ

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

ทันทีที่หมอเห็นตุ่มน้ำที่ท้องแขนก็บอก “ชัวร์ครับ ไม่ต้องตรวจแล้วหล่ะ” (ตุ่มมันใหญ่และใสมากจริงๆ เหมือนหยดน้ำเกาะตามตัว) สิ่งที่หมอได้ให้คำแนะนำมาคือ

  1. ยาเขียว อย่าแช่อย่ากินครับ โอเคว่ามันเป็นยาแผนโบราณ และคนก็ใช้มันมากันนาน แต่ผลของยาวเขียวคือ “ทำให้ตุ่มมันขึ้นเยอะขึ้น เห่อขึ้น” ทำให้ดูแลรักษาตัวเองยากขึ้น มีโอกาสเกิดแผลเป็นก็มากขึ้นด้วยเช่นกัน
  2. อาบน้ำได้ ต้องรักษาความสะอาดมากขึ้นกว่าเดิม เสื้อผ้าเปลี่ยนบ่อยๆ ผ้าปูที่นอน ผ้าเช็ดตัวก็เปลี่ยนด้วย
  3. ห้ามบีบตุ่ม เจาะตุ่ม มันจะอักเสบและเป็นหนักไปใหญ่ แต่ถ้าแตกไปแล้ว (อาจโดยไม่ตั้งใจ) ก็ทำความสะอาดแผลทั่วไป ระวังไม่ให้ติดเชื้อ
  4. ดีใจด้วย คุณได้หยุดงาน 7 วัน

คร่าวๆก็ประมาณนี้ครับ อีสุกอีใสเป็นโรคที่หายได้เองครับ ยาที่ให้มาก็เป็นยารักษาตามอาการ มีไข้ก็ “พารา”​ คันก็ “ยาแก้แพ้” ครับ ส่วนที่มีเพิ่มมาสำหรับรุ่นใหญ่ก็จะมียา “ต้านไวรัส” มาให้อีก 1 แพค ทานทุก 4 ชม. (ของผมเป็น Acyclovir) และได้ให้คำอธิบายมาว่า “มันคงไม่ช่วยให้หายเลยได้ แต่เป็นการต้านไม่ให้มันออกมาเยอะมากเกินไป” เพราะอีสุกอีใสในผู้ใหญ่อาการจะแรงกว่าในเด็กครับ

คืนแรก (เสาร์) : ตอนนอนมีอาการคันตามตัวเล็กน้อย เหมือนมดกัด เช้าขึ้นมา ตุ่มเล็กตุ่มน้อยจะขึ้นตามตัวและหน้าเล็กน้อย และไม่ถ่ายเลย

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

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

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

สรุปข้อปฏิบัติของผมนะครับ

  1. มีระเบียบในการทานอาหาร ทานยา นะครับ ทานแต่ของมีประโยชน์ ผักทานเยอะๆ ยาทานให้ตรงเวลา โดยเฉพาะยาต้านไวรัส ตื่นหกโมงมากินยาก็ยอม
  2. ลุกขึ้นมาทำอะไรบ้างดีกว่าครับ นอนเยอะไปมันจะซมไข้ มันจะหายช้ากว่าเดิม อีกอย่างคืออาการมันไม่ต่างกับหวัดเด็กเลย ถ้าไม่หนักเกินไปก็ทำอะไรให้ร่างกายตื่นตัวดีกว่าครับ
  3. แนะนำแบบส่วนตัวคือ ถ้ามีเสื้อแบบติดกระดุมก็เอามาใส่นะครับ ใส่เสื้อยืดมันจะโดนตุ่มแตกตรงหน้าผากตอนใส่เอาได้นะครับ (ผมแตกไปสองละ T_T)
  4. ยืนยันครับว่า “การบีบตุ่ม ไม่ควรทำด้วยประการทั้งปวง” ไม่นับเรื่องแผลเป็น แผลอักเสบ แต่มันจะ “เจ็บ” ครับ โดนอะไรก็เจ็บ
  5. อาหาร ผู้ใหญ่เขาว่าอย่ากินไข่บ้าง ของทะเลบ้าง (แต่วันแรกผมกินไข่ตุ๋นเลยนะ) เอาเป็นว่า เพื่อความสบายใจ ห่างๆไว้ก็ดีครับ
  6. อาบน้ำอาบได้ ผมอาบน้ำสระผมทุกวันเลย แต่อาบเบาๆ สระผมเบาๆ (ไม่เกา ไม่ขัด ลูบๆเอา) และใช้แชมพูเด็ก เพราะผิวหนังเราอ่อนแออยู่ครับตอนนี้ สบู่เด็กเนี่ยใช้แล้วสบายใจสุดแล้วครับ ว่ามันจะไม่ไประเบิดตุ่มเอา บางคนบอกว่าอาบเดตตอล …ผมว่ามันแรงไป อันนี้เอาเป็นว่า ไม่รับประกันครับ

ทั้งหมดนี้ก็หวังว่าจะเป็นคำแนะนำสำหรับผู้ป่วยที่กำลังค้นหาว่าจะทำยังไง ปฏิบัติตัวยังไงดี หวังว่าคงช่วยได้นะครับ และเป็นกำลังใจสำหรับผู้ที่ป่วยตอนนี้อยู่ สู้ๆนะครับ ;)

 

Update #1 : Comment จากคุณ Cantona Oldtrafford ครับ แนะนำเอาไว้ว่า (แปะไว้ เผื่อใครอ่าน Comment ไม่หมด)

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

สิงหาคม 3, 2011 at 4:04 am 150 ของความคิดเห็น

[Movie Review] พุ่มพวง

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

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

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

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

และเพื่อให้คนรุ่นหลังได้รู้จักเรื่องราวของ “พุ่มพวง ดวงจันทร์” ไม่ใช่แค่จากข่าวหรือจากผลงาน cover แต่ได้รู้จักว่า และตระหนักถึงเจตนารมน์ที่ “ราชินีเพลงลูกทุ่ง” คนนี้ทิ้งเอาไว้ให้คนรุ่นหลังได้สืบทอดต่อไป …ผมแนะนำให้ไปดูกันนะครับ คุ้มค่าและไม่ผิดหวังแน่นอน

* นอกเรื่อง – เรื่องนี้ประทับใจ “พี่วอกVT” จริงจัง ฮ่าๆๆๆ

กรกฎาคม 24, 2011 at 5:23 pm ใส่ความเห็น

First 48 hrs with iOS5 beta

เปิดตัวกันมาได้เกือบอาทิตย์แล้วสำหรับ iOS5 ก็ได้เฮกันไปพอสมควร สำหรับฟีเจอร์ใหม่ๆ คนทั่วไปคงอยากลองกัน แต่สิทธิ์นั้นสำหรับ Developer ที่สมัคร(และเสียเงิน)แล้วเท่านั้น ผมก็ลองใช้แล้วเหมือนกัน Entry นี้ก็เลยจะมา Review กันซักหน่อย ว่า 48 ชม กับการใช้งานจริงในชีวิตประจำวัน iOS5 ฟีเจอร์ใหม่ อะไรเด็ด อะไรโดน อะไรดับ

หมายเหตุ : Feature อาจจะไม่ครบกับที่เปิดตัวทั้งหมด ทั้งนี้ผมอ้างอิงการใช้งานประจำวันของผมล้วนๆ บางอย่างเลยไม่ได้ใช้นะครับ

#1 New Notification : Notification แบบใหม่ไฉไลยังกะของ Android ช่วยตัดรำคาญเรื่องของ Alert ไปได้มากมายจริงๆ ใน Presentation ของ WWDC จะเห็นได้ว่า notification แบบใหม่ ไม่ขัดจังหวะตัดเชือกใน Cut the Rope ได้อย่างน่าพอใจ แต่ใช้งานจริง ขอบอกว่า “มันบัง Navigation bar ครับ” ต้องรอให้มันหายไปก่อนถึงจะกดได้ ถ้ามีปุ่ม close ให้ผมจะถึงจะถือว่าสมบูรณ์ครับ

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

หน้า Notification List ที่ดึงจากบนลงล่าง (แหม ยังกะ Palm Pre) เอาจริงๆก็ไม่ได้ใช้อะไรมาก ผมจะชอบก็ตรง widget พยากรณ์อากาศกับหุ้นมากกว่า ดูมีประโยชน์และได้ใช้มากกว่า Notification ส่วนหน้า Notification List ใน Lock Screen ก็คือว่าโอเค แต่กว่าจะรู้ว่า “ต้องสไลด์จากไอค่อน” ก็ตอนท้ายๆของ 48 ชม แล้ว

สรุป : ดีและโดนกว่า Alert แบบเก่าเยอะ ขาดตกบกพร่องนิดหน่อย เอาไป 4/5

#2 Upgraded Camera.app : เป็นอะไรที่รอคอยมานานมากแล้ว การที่จะให้ไอโฟนควักมาถ่ายรูปได้ทันใจมากขึ้นกว่าเดิม ถือว่าเป็น feature ที่ “โดน” เลยแหละ แต่เอาเข้าจริงก็ไม่อยากใช้บ่อยนัก เพราะการ double home บ่อยๆ จะย่นอายุการใช้งานปุ่ม Home ให้พังเร็วมากกกกก!! ผมไม่ใช้บ่อยแน่ๆจนกว่าจะได้ลง Activator เหมือนก่อน แต่ก็เข้าใจละนะว่า Hardware มันไม่มีที่ให้แทนแล้ว รอดู iPhone5 ก็แล้วกัน คงมีเพิ่มมาอีกปุ่มแหละ เหมือน Sony Ericson ละมั้ง

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

สรุป : ดีกว่าไม่มี เอาไป 3.5/5

#3 iMessage :  สุดยอด Topic ที่เป็นกระแสกันนักว่า “ออกมาประหารพร้อมฝังกลบ BBM & Whatsapp” หรือไม่ ? …จากการใช้งานบอกได้เลย “ไม่!!” สำหรับ BB แค่ออกมาขู่เท่านั้น และสำหรับ Whatsapp ก็แค่มาถมช่องว่างเรื่อง iPod & iPad ของ Whatsapp เท่านั้น

สาเหตุก็เพราะว่า เพราะ iMessage ยังแพ้ Whatsapp & BBM เรื่องของ Group Chat และ Share ข้อมูลอื่นๆอย่าง Contact, location และอีกเรื่องคือแลกเปลี่ยนช่องทางกันยาก แค่เมล์ก็ยากแล้ว นี่ยังจะต้องเมล์ที่เป็น Apple ID อีก ไม่รักจะคุยกันด้วย iMessage คงไม่พยายามขนาดนั้นหรอก ส่วนการใช้งานจริงก็โอเคเลย ไม่หน่วงไม่ delay เผลอๆดีกว่า whatsapp ด้วย แต่พอ Public แล้ว ค่อยว่ากันอีกทีละนะ ว่าจะหน่วงมั้ย

ผมมองว่า Apple คงไม่คิดจะฆ่า Whatsapp เพราะกลุ่มเป้าหมายต่างกันชัดเจน iMessage คือ iPod touch & iPad ส่วนฆ่า BB นี่ จับมือกับ Whatsapp ได้เมื่อไหร่ เอ็งตาย!!

สรุป : ดีกว่าไม่มี เอาไป 3/5

#4 Twitter : จากการทดสอบ share รูปแล้วปรากฎว่า “แชร์ไม่ขึ้น” เนื่องจากสาเหตุอะไรไม่รู้ มีประโยชน์มั้ย? ถ้าเป็นรูป ผมแชร์ด้วยแอพแต่งรูปอยู่แล้ว และแอพแต่งรูปก็มักจะมี Share twitter อยู่แล้ว ดังนั้น ผมว่ามันไม่ค่อยได้ใช้เท่าไหร่หรอก แต่ถ้า Video ก็คงได้ใช้บ้าง แต่ถ้า Quick twit ได้เนี่ย จะแจ่มสุดๆ

สรุป : มีแค่นี้ ไม่มีก็ได้ 2/5

#5 iCloud : ขออภัยที่ไม่ได้ใช้จริงแต่อยากเขียน สิ่งนึงที่ต้องการคู่กับ iOS5 คือ Dual battery ลำพังแค่ notification ก็ทานแบตพอสมควรแล้ว นี่ขนาดเปิด cloud แค่ Find my iPhone แบตก็หมดโคตรเร็ว แต่ด้วยความเป็นเบต้า ผมจะยังไม่ฟันธงชี้ขาดแล้วกัน

สรุป : ดับแน่ ถ้าไม่แก้เรื่องพลังงาน

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

มิถุนายน 10, 2011 at 4:05 pm 1 ความเห็น

[Movie Review] ลัดดาแลนด์

สดๆร้อนๆกับหนังเรื่องล่าสุดที่ไปดูมา น่าจะเป็นเรื่องแรกที่กลับมาเขียน Review แทบจะทันทีที่ถึงบ้านเลยก็ว่าได้  ตอน Trailer ผมว่ามันก็น่าดูนะ แต่ก็ไม่ได้ซีเรียสว่าต้องได้ดู ฉายจริงกระแสแรงซะจนห้ามไม่อยู่มั้ง ของแรงต้องขอลองซะหน่อย

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

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

แต่ถึงอย่างนั้นก็ไม่ได้หมายความว่าฉากสยองจะไม่ได้น่ากลัวอะไรมากมาย ตรงข้ามเลย โคตรน่ากลัว!! มาทุกแบบทุกอารมณ์ด้วย!! สารภาพตรงๆว่าผมก็เผลอ “เฮ้ยย!!” ออกมาในโรงเหมือนกัน เรื่องก่อนหน้านี้ที่ผมร้องแบบนี้คือ “ชัตเตอร์” และไม่มีอีกเลยจนกระทั่งเรื่องนี้ ดังนั้นอยากดูหลอนๆก็ได้แบบเต็มๆแน่นอนครับ รับรอง

นักแสดง ผมชอบพี่ก้องนะ แสดงบทพ่อได้ดีมากจริงๆ ดูแล้วอินเลย ส่วนน้องปันปัน(น้องสิวเม็ดแรก)ก็น่ารักจริงๆ ให้ตายสิ อะฮิๆๆ

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

เมษายน 30, 2011 at 6:10 pm 1 ความเห็น

Magic of NSLog

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

Trick #1 : รู้รึเปล่า ว่าการทำงานพร้อมกับการ Log ค่าไปด้วย ทำให้เป็นการลดประสิทธิภาพการทำงานของ App ลงไปเยอะเลย ก่อน  Submit app ขึ้น App store เราควรจะ remove log ของเราออกไปด้วย …จริงอยู่ว่า App ทั่วไปอาจไม่มีผลต่อประสิทธิภาพโดยนัย แต่ถ้าเป็นเกม …มีนัยครับ ดังนั้น เราจะสร้าง Log ของเราเองขึ้นมา ที่ให้ Log ค่า ตอนที่ XCode ตั้งค่าเป็น Debug mode เท่านั้น ใส่โค้ดพวกนี้ในไฟล์ xxx_Prefix.pch ของโปรเจค เพื่อให้มีผลกับทั้งโปรเจคครับ

#ifdef DEBUG
# define JELog(fmt,...) NSLog(@"%@",[NSString stringWithFormat:(fmt), ##__VA_ARGS__]);
#else
# define JELog(...)
#endif

อธิบายโค้ดดังกล่าวได้ว่า เราสร้าง JELog ขึ้นมาเพื่อให้มันทำงานเหมือน NSLog เลย แต่จะพิมพ์ออกทางหน้าจอเมื่อ Preprocessor Macro ถูกเซตคำว่า DEBUG เอาไว้ แต่ถ้าไม่ได้เซตก็ไม่ต้องทำอะไร

ส่วนการเซตค่า  Preprocessor Macro ไปเลือกที่ Project->Edit Project Settings เลือก Debug ในช่อง Configuration และใส่ค่า DEBUG (หรือคำอื่นๆที่นิยามไว้) ใน Preprocessor Macro เซคชั่น GCC 4.2 – Preprocessing

…แค่นี้แหละครับ เสร็จแล้ว คราวนี้เรา Build ในโหมด Release ก็ไม่มี Log มาบั่นทอนประสิทธิภาพ App เราแล้ว

Trick #2: จะดีแค่ไหน ถ้าการ Log ทำให้เรารู้ได้ว่า มันโดน Log มาจาก Function อะไร และบรรทัดไหน เราสามารถเพิ่มมันได้เอง ในรูปแบบที่เราต้องการ และไม่ต้องเหนื่อยมาใส่แบบลูกทุ่งทีละบรรทัดทีละ Log ด้วย ทำได้ง่ายๆแบบนี้ครับ

#define JELog(fmt,...) NSLog((@"%s-%d:" fmt),__PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

เพียงเท่านี้ เราก็ Log สิ่งที่เราต้องการพร้อมชื่อ Function และบรรทัดนั้นได้ง่ายๆแล้วครับ นอกจากนี้ยังมี __FILE__ เพื่อ log ชื่อไฟล์ชื่อนั้นอีก แต่ผมไม่ใส่เพราะผมไม่ใช้ อิอิ

ครับ สำหรับ Entry นี้ก็คงกล่าวถึงแค่นี้ ส่วนถ้าใครยังไม่สะใจอยากแต่งอยากเติมอีก ก็เข้าไปดูในเครดิตครับ มีคนทำไว้หลายแบบเหมือนกันสำหรับผม แค่นี้ก็สบายแล้ว หุหุ …ว่าแล้วก็จบเท่านี้ดีกว่า Happy Logging นะครับ ;)

Credits:

@memogames
iphoneprogrammingfordummies.blogspot.com
Stack Overflow : NSLog Tip & Trick

มีนาคม 24, 2011 at 5:23 pm ใส่ความเห็น

Older Posts


del.icio.us For iPhone dev

Post Calendar

พฤษภาคม 2024
จ. อ. พ. พฤ. ศ. ส. อา.
 12345
6789101112
13141516171819
20212223242526
2728293031