Monday, January 23, 2012

Lean Production

วันนี้โดนยา Nasifed เข้าไป ไม่เป็นอันทำอะไรเลยฮะ ง่วงตาจะปิดอยู่ตลอดเวลา อ่านหนังสือสอบก้ไม่รู้เรื่อง ก็เลยหาทางทำยังไงดีนะที่จะทำให้หายง่วงได้ และได้งานไปด้วย ก็เลยอัพบล๊อกแม่งซะเลย
การสอบ Comprehensive ที่จะเกิดขึ้นในวันอาทิตย์นี้มีเรื่องที่เกี่ยวกับ Operation Management ซึ่งโดยรวมแล้ววิชานี้พูดถึงเรื่องการลดต้นทุนในการดำเนินงาน โดยวิธีหนึ่งที่ได้ประสิทธิภาพมากเรียกว่า Lean Production ซึ่งผมคิดว่าการลดต้นทุนเป็นวิธีที่ดีในการสร้างความได้เปรียบทางการแข่งขันนะ ยังไงก็น่าจะง่ายกว่าการหาเรื่องขึ้นราคาจริงป่ะ

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

เป้าหมายของ Lean Production
1. ให้ความสำคัญกับกระบวนการที่สร้างมูลค่าเพิ่มและตรงกับความต้องการของลูกค้า และลดกระบวนการที่ไม่สร้างมูลค่าเพิ่ม เช่น การขนย้ายสินค้าที่ไม่ก่อให้เกิดประโยชน์ เป็นต้น
2. ลด "ความสูญเปล่าทั้ง 7 ประการ" หรือในวงการ Logistic จะเรียกกันว่า 7 Wastes
3. ลดระยะเวลาในการทำการผลิต
4. ลดต้นทุน

ความสูญเปล่าทั้ง 7 ที่เราจะใช้ Lean Production แก้
มีวิธีจำให้ง่ายขึ้นโดยให้จำว่า "WORMPIT" ดังนี้

1. W : Waiting หมายถึงการรอคอยที่ไม่เกิดประโยชน์ ซึ่งอาจเกิดจากปัญหาคอขวดในสายพานการผลิต ไม่ว่าจะเป็นทางด้านคนหรือเครื่องจักร ซึ่งจะส่งผลทำให้เกิดความไม่ต่อเนื่องในการผลิต หรือผลิตสินค้าได้ไม่ทันตามความต้องการของผู้บริโภค นับเป็นการสูญเสียด้านเวลาอย่างมหาศาล ยกตัวอย่างเช่น การรอคิวถ่ายเอกสารในแง่ของพนักงาน หรือการรอคิวการผลิตในสายพานการผลิตที่เกิดจากปัญหาคอขวดของวัตถุดิบ หรือ ความสามารถที่ไม่เท่ากันของพนักงาน โดยแนวทางแก้ไขของปัญหานี้ก็ขึ้นอยู่กับสถานการณ์ว่าเกิดอะไรขึ้น โดยอาจจะใช้ Gantt Chart เพื่อดูระยะเวลาในการดำเนินงานแต่ละอย่างก็ได้ เพื่อให้เห็นภาพระยะเวลาในการผลิตโดยรวมและปรับปรุงตามความเหมาะสมก็ได้ หรือ อาจจะใช้วิธีการควบคุมการไหลของคิวงานตามแบบ FIFO หรือ LIFO ก็ได้ ตามความเหมาะสม

2. O : Over Production หมายถึง การผลิตที่มากเกินจำเป็น เนื่องจากผู้ผลิตสินค้าต้องการผลิตสินค้าให้มีจำนวนมากพอที่จะขายให้กับลูกค้าได้ และไม่ต้องการสูญเสียโอกาสในการขายสินค้าเมื่อลูกค้าต้องการโดยทันที ซึ่งการผลิตสินค้าให้มีจำนวนมากเป็นวิธีหนึ่งที่ใช้แก้ปัญหาเหล่านี้ ซึ่งนี่เองเป็นสาเหตุของการผลิตที่มากเกินไปอีกด้วย ซึ่งการผลิตที่มากเกินไปนั้นไม่ได้ก่อให้เกิด Value เพิ่มในการผลิตเลย อีกทั้งยังเป็นการสิ้นเปลืองทรัพยาการโดยใช่เหตุอีกด้วย ซึ่งหากจะยกตัวอย่างก็อาจจะมองเห็นได้หลายแง่ เช่น การที่ผู้ปฏิบัติงานทำงานที่นอกเหนือจากที่ผู้บังคับบัญชาสั่ง ดังนั้นนอกจากจะไม่ได้เป็นการเพิ่ม Value ให้งานที่สั่งแล้ว ยังเป็นการสูญเสียทรัพยากรและเวลาอีกด้วย โดยแนวทางแก้ไขปัญหานี้ก็ทำได้หลายวิธี (อีกละ) ไม่ว่าจะเป็น Process Analysis เพื่อนำผลที่ได้มาประเมินดูว่ามีงานที่ไม่ได้ก่อให้เกิดประโยชน์หรือไม่ หรือการใช้วิธีการปรับปรุงกระบวนการผลิตให้มีประสิทธิภาพมากขึ้้นเพื่อลด Defect ที่จะเกิดขึ้นในการบวนการผลิต ซึ่งจะทำให้ผู้ผลิตสามารถประเมินจำนวนสินค้าที่ควรจะผลิตได้แม่นยำมากขึ้นผ่านเครื่องมือ 7 QC ดังนี้
1. Check Sheet : ใช้เพื่อรวบรวมข้อมูลได้ง่ายยิ่งขึ้น
2. Pareto Chart : ใช้เพื่อกำหนดกรอบของปัญหา และประกอบการตัดสินใจว่าปัญหาไหนสำคัญที่สุด
3. Fishbone Diagram : ใช้เพื่อหาสาเหตุของปัญหาว่ามีสาเหตุใดเป็นไปได้บ้าง
4. Histogram : ใช้เพื่อวิเคราะห์ความเบี่ยงเบน (ที่ไม่เกี่ยวกับทางเพศ) ของข้อมูล
5. Scatter Diagram : ใช้เพื่อดูความสัมพันธ์กันระหว่างตัวแปร
6. Flow Chart : ใช้เพื่อแสดงการทำงานแบบทีละขั้นตอน และสามารถบอกได้ว่ามีขึ้นตอนไหนไม่จำเป็นได้ด้วยนะเออ
7. Control Chart :  เป็นแผนภูมิกราฟที่ใช้เพื่อการควบคุมกระบวนการผลิต โดยมีการแสดงให้เห็นถึงขอบเขตในการควบคุมทั้งขอบเขตควบคุมบน (UCL) และขอบเขตล่าง (LCL) แล้วนำข้อมูลด้านคุณภาพของผลิตภัณฑ์ในกระบวนการมาเขียนเทียบกับขอบเขตที่ตั้งไว้เพื่อจะได้รู้ว่า ในกระบวนการผลิต ณ เวลาใดมีปัญหาด้านคุณภาพ จะได้รีบแก้ไขปรับปรุงกระบวนการให้กลับสู่สภาพปกติโดยเร็ว

3. R : Rework หมายถึงความสูญเปล่าจากการกลับมาแก้ไขงานเก่าเนื่องจากสินค้าที่ผลิตได้ ไม่มีประสิทธิภาพ หรือการทำงานที่ซ้ำซ้อน ซึ่งข้อนี้ไม่ต้องพูดอะไรมาก แก้ไขได้โดยการทำให้ Defect ออกมาน้อยที่สุด "สตินะลูก สติ" อย่าให้มันเสียเยอะ หรืออาจจะใช้วิธีควบคุมคุณภาพโดยวิธี 7 QC ดังที่กล่าวมาข้างต้นก็ได้นะจ๊ะ แต่อย่างไรก็ตาม หัวใจสำคัญของการแก้ไขปัญหา Rework นี้ คือการรีบเร่งหาต้นตอของสาเหตุที่ทำให้เกิดปัญหาแล้วแก้ซะ ก่อนที่สินค้า Lot ใหม่จะถูกผลิต

4. M : Motion หมายถึงความสูญเปล่าอันเกิดจากการเคลื่อนไหว ทำให้ทำงานได้ช้าลงเช่น พนักงานต้องเอียงไปหยิบวัตถุงดิบจากข้างหลังแล้วจึงหันหน้ามาผลิตได้ ซึ่งพบได้มากในโรงงานเย็บเสื้อผ้า หรือโรงงานแกะกุ้ง นอกจากจะทำให้ทำได้ช้าลงแล้วยังส่งผลเสียต่อร่างกายของพนักงานอีกด้วย ซึ่งความสูญเปล่านี้อาจจะแก้ไขได้โดยการจัดผังการวางของหรือการทำงานใหม่ซะ (Layout) หรือจะใช้วิธีการที่เราคุ้นเคยกันดี อย่างเช่น 5ส (สะอาด, สะดวก, สะสาง, สุขลักษณะ, สร้างนิสัย) หรือ ABC Analysis ก็ไม่ผิดนะ

5. P : Processing หมายถึงความสูญเปล่าจากการที่กระบวนการผลิตที่ไม่มีประสิทธิภาพ เช่นการทำงานซ้ำซ้อน หรือแม้กระทั่งการไม่ดูแลรักษาเครื่องจักรจนทำให้ความสามารถของเครื่องจักรต่ำลง ซึ่งการทำ Process Analysis และการเขียน Flow Chart จะช่วยแก้ปัญหานี้ได้

6. I : Inventory หมายถึงความสูญเปล่าจากการที่เรามีพัสดุคงคลังมากเกินไป ซึ่งบางคนถามว่าไม่ดีตรงไหน "ก็มันเปลืองพื้นที่ เสียเวลาขนส่ง เปลืองค่าบำรุงรักษาโกดัง ไงล่ะลูกเอ๊ย" ดังนั้นแก้ไขซะด้วยวิธี "JIT (Just In Time)" หรือ Pull Strategy ก็ได้นะลูก โดยมีลักษณะดังนี้
1. การไหลของวัสดุ เป็นแบบดึง (Pull Method)
หมายถึง การผลิตสินค้าเมื่อมีความต้องการ เมื่อผู้ผลิตได้รับคำสั่งผลิตก็จะทำการดึงสินค้าจาก Supplier  มาทำการผลิต
2. สั่งซื้อจำนวนน้อยในแต่ละครั้ง (Small Lot Size Ordering)
หมายถึง การกำหนดการสั่งซื้อวัสดุเท่ากับปริมาณที่จะใช้ในการผลิต ทำให้มีวัสดุพอดีไม่ต้องเหลือเก็บ แต่ก็มีข้อเสียเช่น หากเป็นการผลิตที่ไม่ใช้วัสดุนั้นเป็นประจำจะทำให้การสั่งซื้อมีปริมาณน้อย มีการสั่งซื้อย่อยบ่อยๆ ย่อมเพิ่มต้นทุนการสั่งซื้อ และต้นทุนค่าขนส่งเพิ่มในวัสดุนั้น หากเป็นการผลิตที่ต้องมีการปรับตั้งเครื่องจักรบ่อยๆครั้ง  ก็อาจทำให้เสียเวลามากขึ้นได้
3.การผลิตแบบอัตโนมัติ (Automated Production)
การผลิตแบบอัตโนมัติมีความสัมพันธ์กับการจัดส่งแบบทันเวลาพอดีอย่างยิ่ง เพราะเป็นการสนับสนุนการทำงานซึ่งกันและกัน ดังนั้นการกำหนดแผนงาน เวลา ปริมาณการใช้วัสดุต้องสัมพันธ์กันและต้องการความแม่นยำ
4. การปฎิบัติงานแบบคงที่ (Workstation Stability)
การวางแผนการทำงานที่ดี ทำให้จุดการทำงานหรือสถานีการทำงานได้รับงานในลักษณะคงที่ในแต่ละวัน เพื่อให้การทำงานเป็นไปอย่างราบรื่น สามารถลดเวลาในการผลิต
5. ความสัมพันธ์กับผู้จัดส่งที่ดี (Good Relation)
โดยปกติการจัดส่งแบบทันเวลาพอดี (JIT) มักไม่เปลี่ยนตัวคู่ค้า หรือผู้จัดส่งบ่อยๆ เพื่อให้การจัดส่งเป็นไปอย่างราบรื่น และไว้ใจได้
ทั้งหมดทั้งมวลนี้มีส่วนช่วยในการแก้ไขปัญหา Inventory ได้ทั้งสิ้น แต่สิ่งที่สำคัญที่สุดคือ "การพยากรณ์สินค้าที่จะสั่งให้แม่นยำ" นั่นเอง

7. T : Transportation หมายถึงความสูญเปล่าเนื่องมาจากการขนย้ายไม่ว่าจะเป็นการข้นย้ายระหว่าง กระบวนการกับกระบวนการ ชั้นบน ชั้นล่าง หรือการขนย้ายไปวางชั่วคราว ณ ที่ใดที่หนึ่ง รวมไปถึงการขน วางซ้อน เปลี่ยน และการต้องขนงานขึ้นลงในแนวดิ่งด้วย ซึ่งการขนย้ายเหล่านี้ ไม่ได้ก่อให้เกิด Value เพิ่มเลย (ยกเว้นการขนย้ายที่เกิดประโยชน์) ซึ่งอาจจะแก้ปัญหานี้ได้โดยการทำยังไงก็ได้ให้มีการขนย้ายน้อยที่สุด เช่น การจัดแผนผังของโกดังให้เหมาะสม หรือ การหา Shortest Path ในการส่งของ เป็นต้น

Sunday, January 22, 2012

การโพรเซสภาพนั้น สำคัญไฉน

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

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

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

3. สำหรับผมแล้ว การที่ถ่ายรูปมาแล้วไม่ได้ Process มันก็เหมือนผมใช้เครื่องมือไม่ครบในการที่จะได้รูปดั่งใจคิด สำหรับผม มันไม่ใช่การแก้รูปเสียให้ออกมาดูดี ถ้าใครคิดแบบนี้ลองแก้รูปของผมให้ออกมาสวยหน่อยฮะ ผมมีรูปเสียเป็นกระบุง มันทำไม่ได้ทุกอย่างหรอกไอ้ PS เนี่ย ก็เหมือนกันการทำกับข้าว ถ้าเอาไก่เน่า ผักเน่ามาทำ อาหารจะอร่อยได้ยังไงจิงป่ะ

4. การ Process คือการลงทุน ในการ Process แต่ละครั้งนั้น หากเป็นมือใหม่ ก็ต้องใช้เวลา ต้องลองผิดลองถูก ต้อนผ่านกระบวนการ "คิด" ทั้งนั้น หลายคนยอมเสี่ยงที่จะเรียนรู้ หลายคนไม่กล้าเรียนรู้ (นี่่มันยุคดิจิตอลนะคร๊าฟฟฟฟ) หลายคน "ปิดใจ" ซึ่งท่านรู้รึเปล่า ว่ารูปออกจากกล้องที่ไม่ใช่กล้องฟิล์มเนี่ย แต่งมาแล้วทั้งนั้น แต่งจาก Feature ที่กลายเป็นปัจจัยในการเลือกซื้อกล้องของท่านน่ะแหละ ผู้ผลิตเค้าใส่มาให้หมดแล้วแหละ


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

Thursday, December 29, 2011

โหมดนั่งมองตัวเอง ปีนี้เรียนรู้อะไรเพิ่มบ้าง

วันนี้วันที่ 30 ธันวาคม แถมเป็นวันศุกร์แห่งชาติอีกนะเทอว์ ซึ่งถ้าดูตามฮวงจุ้ยแล้ว วันนี้เป็นวันที่ไม่น่ามาทำงานมากที่สุด แต่ในเมื่อมาทำงานไปแล้วลองมานั่งมองตัวเองในปีที่จะผ่านไปนี้ก็ไม่เลวเหมือนกันแฮะ อย่างน้อยเราก็จะได้ประเมินได้ว่าสำหรับการประกอบอาชีพแล้ว เรามีอาวุธอยู่กี่ชิ้น และจะเอาอาวุธพวกนี้ไปใช้อะไรได้บ้าง ซึ่งถ้าจะให้พูดสิ่งที่เรียนรู้มาทั้งหมดในปีที่แล้ว เขียนยาวเป็นอาทิตย์แน่นอน ดังนั้น Entry นี้จะพูดในด้านที่เกี่ยวกับอาชีพ Software Engineer ในแง่ Technical แล้วก็เน้นเป็นตัว Tools หรือ Programming Language ที่เป็น Open Source ละกันนะจ๊ะ


1. JSF
ซึ่ง JSF ตัวที่เรียนรู้นี่ก็คือ RichFace ซึ่งเป็น JSF Framework ตัวนึงอ่ะนะ ส่วนตัวไม่ค่อยประทับใจเท่าไหร่เนื่องจากมีบางครั้งมันชอบ Render ผิด ถึงแม้ว่ามันจะสะดวกสบายในแง่การ Coding กว่าการใช้ JSP อยู่ไม่น้อยก็ตาม หากใครกำลังมองหา Tools ที่ช่วยในการจัดการในด้าน View ใน MVC หรือขี้เกียจมานั่งเขียน Tab, Menu หรืออะไรพวกนี้ ลองดูก็ไม่เสียหาย และผมเชื่อว่าคุ้มค่ากับที่ลงทุนเสียเวลาเรียนรู้แน่นอนฮะ ในแง่ของ Reference ของ RichFace ก็หาไม่ง่ายแล้วก็ไม่ยากทำให้การเรียนรู้ใช้เวลาไม่นานเท่าไหร่ ให้ 3 ดาวฮะ ♥ ♥ ♥


2. Pentaho
เมื่อก่อนก็ใช้แต่ Jasper ในการทำ Business Intelligent แต่พอมารู้จักกับ Pentaho แล้ว อะไรมันก็สบายขึ้นโขเลยฮะ ส่วนตัวแล้วค่อนข้างประทับใจกับ Tools ตัวนี้มาก เนื่องจากสามารถใช้สร้าง Report ได้แล้ว Data Transformation ยังเป็นอีก Function ที่ได้ใช้ประโยชน์อยู่บ่อยครั้ง และที่สำคัญการมี Tools นี้ยังเป็นการบอกใช้ว่าเราควร Transform Data ให้เรียบร้อยก่อนนะจ๊ะ ถึงจะดึง Report Data ได้อย่างมีประสิทธิภาพ 4 ดาวโลด ♥ ♥ ♥ ♥


3. Process Maker
โปรเจกนี้เกิดจากความขี้เกียจเขียน Work Flow Application เลยลอง Tools ที่ชื่อว่า Process Maker นี้ซึ่งมีดีกรีดังมาจากผู้ผลิต CRM Software เจ้าดังอย่าง SugarCRM เลยนะเออ แต่เนื่องจาก Reference หายากเหี้ยๆ เลยทำให้ Effort ที่ทุ่มเทลงไปไม่เต็มที่เท่าที่ควร บวกกับควาามขี้เกียจที่เกิดขึ้นกระทันหัน Project นี้ก็เลย Fail ไปตามระเบียบ แต่ก็ถือเป็นอีกหนึ่งเครื่องมือที่น่าสนใจมาก ถ้าคราวหน้ามีโอกาสก็อยากจะลองให้เป็นให้ได้จ่ะ ♥ ♥ ♥


4. Android
อันนี้แนะนำมากฮะ เนื่องจากกำลังเป็นกระแสของโลก และเชื่อว่าถ้าศึกษาไว้ ไม่อดตายแน่นอน โดยจากประสปการณ์ส่วนตัวก็ลองเล่นไปลึกพอสมควร แต่ไม่ถึงกับต้องเขียน Native นะ ก็พบปัญหาของตัว Android นี้อยู่จำนวนไม่เยอะเท่าไหร่ ที่เห็นจะเป็นเรื่องใหญ่ก็น่าจะเป็นเรื่อง Fragmentation นี่แหละ ส่วนเรื่องโครงสร้างของภาษาก็ไม่มีอะไรมาก Java + XML ซะส่วนใหญ่ ซึ่งหากลองวิเคราะห์แล้วก็ไม่ค่อยจะเหมาะกับการเอามาเขียนบน Smart Phone Devices เท่า Object-C เท่าไหร่ แต่ไม่เป็นไรเพราะ ข้อดีมันก็เยอะเช่นกัน หากใครพอจะมีเวลาแล้วอยากหาอะไรที่สนุกและท้าทาย ลอง Android ซะหน่อยก็ไม่เสียหายนะ 5 ดาวฮะ ♥ ♥ ♥ ♥ ♥


5. Grails
ตัวนี้มีโอกาสได้ลองช่วงท้ายปี เนื่องจากมีโปรเจกที่ต้องใช้พอดี ตอนแรกก็รู้สึกตื่นเต้นมว๊ากกกกก!! เนื่องจากรู้สึกเบื่อกับ Configuration Files ทั้งหลายแหล่ อีกทั้งตัวภาษา (Groovy) ที่ใช้ในการเขียนเนี่ย ยังไม่ค่อยจะชินเท่าไหร่ แต่ก็ถือเป็นภาษาที่น่าสนใจมาก อ้อ เกือบลืมข้อที่ประทับใจในตัว Grails ก็คือ แก้ Code ปุ๊ป Run ต่อได้เลย (อย่างเจ๋ง) พอกันทีกับการ Redeploy แล้วต้องมานั่งรอ อุโฮะ สำหรับตัวนี้ยังศึกษาได้ไม่ค่อยลึกเท่าไหร่ แต่ก็ถือเป็นการเริ่มต้นที่ดีคิดว่าปี 2012 นี้คงจะรู้อะไรมากขึ้น 4 ดาวโลด ♥ ♥ ♥ ♥

Wednesday, December 14, 2011

การติดต่อแบบทุ่งหญ้าใกล้ (NFC)

ดูจากหัวข้อคาดว่าทุกคนคงงงแดรกแน่นอน นี่ก็เป็นรูปแบบการแปลที่น่าทึ่งของ Google Translate ที่พยายามแปลภาษาไทยเพื่ออำนวยความสะดวกให้กับเหล่าผู้ใช้งานทั้งหลาย อีกหนึ่งเทคโนโลยีนึงที่กำลังจะเข้ามาในประเทศไทยคือ "เครื่องตัดสัญญาณอินเตอร์เนท" ที่เหลิมเป็ดบอกจะนำเข้ามาในราคา 400 ล้านบาทตามข่าวที่เห็นในหน้านี้ http://www.blognone.com/news/28340 ถ้าพูดกันตามตรงโดยที่ยังไม่เอาราคามารวม กุก็ยังไม่เคยได้ยินว่าโลกนี้มันมีเครื่องเหี้ยมนี่เกิดขึ้นมาแต่อย่างใด
ไร้สาระกันมาพอหอมปากหอมคอ วันนี้ตัวกระผมจะขอนำเสนอเทคโนโลยีที่กำลังจะมา แต่ไม่รู้ว่าจะโดนรึเปล่าในประเทศไทย นั่นก็คือ NFC เชื่อว่าหลายคนคงเคยได้ยินคำนี้มาบ้างหากติดตามข่าวสารด้าน Gadget หรือ Smartphone ซึ่งเป็นข่าวลือว่า Smartphone หลายรุ่นจะมีเทคโนโลยี NFC นี้ติดมาด้วย วันนี้เราจะมาทำความรู้จักกับมันกับฮะ

NFC คืออะไร
NFC นั้นเป็นร้ายแฟรนชายส์ที่ขายไก่ทอดชื่อดัง (ทุ้ย!! นั่นมัน KFC) อันที่จริงแล้วมันย่อมาจาก Near Field Communication ซึ่งหมายถึงเทคโนโลยีสื่อสารไร้สายระยะสั้น ซึ่งถ้าถามว่าสั้นแค่ไหนนั้น ผมขอบอกเลยว่าแค่ประมาณ 3 นาที่เท่าต้มมาม่าเสร็จ (ทุ้ย!! เค้าหมายถึงระยะทาง) หากจะพูดให้เข้าใจง่าย ให้นึกภาพตามถึงบัตรที่เราติ๊ดเข้าออฟฟิส (RFID) อ่ะ ก็คือจะมีตัวปล่อยสัญญาณแล้วก็มีตัวรับสัญญาณหลักการธรรมดาทั่วไป แล้วถ้าถามว่าทำไมต้องมี NFC ด้วย ตอนนี้เราก็มี Bluetooth อยู่แล้วนี่นะ
ถ้าลองเอา NFC มาเปรียบเทียบกับ Bluetooth ซึ่งเป็น การสื่อสารไร้สายระยะสั้นเหมือนกันจะเห็นได้ว่า NFC นั้นจะส่งข้อมูลได้ช้ากว่า Bluetooth และระยะที่สามารถส่งสัญญาณได้นั้นสั้นกว่า แต่อย่าไรก็ตามมันใช้พลังงานน้อยกว่า แล้วก็ไม่ต้อง Pair เหมือน Bluetooth โดยที่ Maximum Transfer Rate ของ NFC นั้นมีค่าเท่ากับ 424 KBIT/S และข้อดีจากการที่มันสามารถส่งสัญญาณได้ในระยะที่สั้นกว่าก็คือจะไม่มี Interception เยอะเหมือน Bluetooth ซึ่งถ้าหากใครยังไม่กระจ่างชัดเรื่อง NFC ก็สามารถไปหาข้อมูลเพิ่มเติมได้ที่ http://en.wikipedia.org/wiki/Near_field_communication หรือ http://www.nfc-forum.org/home/ โดยในปัจจุบันนี้ผู้ผลิตโทรศัพท์หลายค่ายก็ได้พยายามผลักดันให้ NFC กลายมาเป็นมาตรฐานใหม่ของโลก (ประเทศไทยไม่นับ 555+) เพื่อให้ใช้ในวงกว้าง ลองนึกภาพที่เราไม่จำเป็นต้องพกกระเป๋าตังค์ บัตรขึ้นรถไฟฟ้า ตั๋วหนัง หรือแม้กระทั่ง บัตรประชาชน ซึ่งแน่นอนหลักการทำงานก็จำเป็นจะต้องมีการส่งสัญญาณโดย NFC ซึ่งจะมีลักษณะเป็น Chips และถูกฝังลงในมือถือของเรา และยังต้องมีเครื่องรับสัญญาณเหมือนเครื่องติ๊ดบัตรที่เหล่าร้านค้าจะต้องไปสรรหามาตั้งไว้ เพราะ "คนเรามันตบมือข้างเดียวไม่ดัง" อย่างที่พวกพี่วง Instinct บอกมา ซึ่งอีกไม่นานโลกของเราก็คงจะได้เห็นการใช้งาน NFC ออกมาบ้างแหละ

Monday, November 7, 2011

[วิชามาร] เปลี่ยนสี Disabled Checkbox

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

แต่ท้ายที่สุดแล้ว ทางแก้ต้องมี หลังจากการปรึกษาก็ ศาสตราจารย์ Amp Thunder ผู้เชี่ยวชาญทางด้าน Checkbox ก็ได้คำแนะนำมาว่าใช้ Javascript สิ โดยใส่ Event ว่าถ้ากล่องมันเคยว่างเปล่าไม่มีเครื่องหมายถูก พอกดแล้วก็เอาเครื่องหมายถูกออกให้มันเป็นเหมือนเดิม (เออว่ะ) ปิ๊งป่องเลยคร๊าฟฟฟฟ

นิทานเรื่องนี้สอนให้รู้ว่า "อย่าดูถูก Javascript นะเออ"

Thursday, October 13, 2011

Vertical Database Design

สำหรับการทำงานจริงอะไรก็เกิดขึ้นได้ บางครั้งอะไรที่ดีที่สุดก็อาจจะใช้ไม่ได้สำหรับ User (ให้นึกถึงเพลง สิ้นสุดกันที ไม่ว่าชาตินี้ชาติไหน ของอาจารย์สุรพลไว้ ได้อารมย์มาก) ดังเช่นกรณีศึกษาที่ผมเพิ่งจะผ่านมาไม่นานมานี้ เนื่องด้วยโครงสร้างองค์กรที่ต้องการ Security สูง ทำให้มีภายในแผนก IT เองถูกแบ่งย่อยเพื่อที่จะทำให้การบริหารงานเป็นไปอย่างมีระบบและมีประสิทธิภาพ ซึ่งการแบ่งงานตาม Function ของงานแบบนี้มีประโยชน์ทวีคูณต่อองค์กร พนักงานเองควรจะต้องปรับตัวให้ได้เพื่อให้สามารถทำงานได้อย่างมีความสุข วกกลับเข้ามาที่กรณีศึกษา ภายใต้การทำงานครั้งนี้มี Condition ที่จะขัดไม่ได้ดังนี้
     1. ใช้ Grails ในการพัฒนา
     2. ไม่ควรเปลี่ยนโครงสร้าง Database บ่อยครั้งนัก
     3. Requirement ยังไม่นิ่ง อาจมีการเปลี่ยนแปลงได้ทุกเมื่อ
ภายใต้สภาวะการณ์เช่นนี้ถือเป็นการยากในการออกแบบ Database เนื่องจาก Requirement ยังไม่นิ่ง อาจจะมีการเพิ่ม Column ในอนาคต ซึ่งจะกระทบต่อ Function งานอื่นที่มีหน้าที่ดูแล Data Warehouse อาจจะทำให้เค้างานเข้าได้ ยิ่งใช้ Grails ซึ่งหากสร้างหรือเปลี่ยนแปลง Domain แล้วมันจะเข้าไปเปลี่ยนแปลง Database ให้ตามที่เขียนไว้ใน Groovy Class นั้นยิ่งแล้วใหญ่ เราลองมาดูอีกหนึ่งทางออกสำหรับปัญหานี้ดูครับ

หลักจากได้รับคำแนะนำจาก @Amp Thunder ผู้เปี่ยมประสปการณ์ ทำให้เราได้การออกแบบ Database แนวใหม่ (ที่กุไม่ค่อยได้ใช้ ;P) โดยกระผมจะขอตั้งชื่อการออกแบบนี้ว่า "แนวตั้ง" หากหลายคนยังไม่เห็นภาพลองดูรูปประกอบครับ


ซึ่งแน่นอนแบบที่เราชินชากันคือด้านซ้ายมือ แต่ถ้าจะเก็บข้อมูลเพิ่มเช่น อยากจะเก็บเบอร์โทรศัพท์เนี่ย ยังไงก็ต้องเพิ่ม Column แต่ถ้าเราทำแบบขวามือ ไม่ต้องเพิ่มฮ๊าล์ฟฟฟฟฟ (ดู Record ที่ 7)

คราวนี้เราลองมาวิเคราะห์กันดีกว่าว่าหากเลือกใช้การ Design แบบด้านขวามือเนี่ยจะกระทบอะไรกับชีวิตเราบ้าง
     1. แน่นอนเปลี่ยนวิธี Query
     2. หากทำเป็น Application ก็จะต้องเปลี่ยนวิธีการเอา Result Set มา Map กับ Model
     3. Database จะบวม
     4. Performance แย่กว่าแบบซ้ายมือแน่นอน หากมีข้อมูลเยอะ
     5. ไม่ต้องเพิ่ม Column
หากดูผิวเผินอาจจะดูแย่กว่าซ้ายมือทุกประการ มีข้อดัข้อเดียวคือไม่ต้องเพิ่ม Column แต่ท้ายที่สุดแล้วก็ขึ้นอยู่กับ Condition ประกอบการตัดสินใจ การออกแบบนี้อาจจะเหมาะกับการที่ถูกจำกัดไม่ให้เพิ่ม Column และ Requirement ยังไม่นิ่งกว่าแบบซ้ายมือก็ได้ นี่ก็เป็นอีก 1 วิธีการออกแบบ Database นะจ๊ะ สำหรับบางคน (อาจ) จะยังไม่ค่อยได้ใช้ แต่เรียนรู้ไว้ก็ไม่เห็นจะเสียหายเนอะ

Thursday, September 29, 2011

Grails คืออะไรหรา

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

ข้อดีของ Grails ที่สัมผัสได้
สำหรับบางคนการพัฒนา Web Application ซักตัวหนึ่งถือเป็นเรื่องค่อนข้างซับซ้อน แม้ว่า Project ที่เราต้องการจะพัฒนานั้นจะเป็นระบบที่ง่ายขนาดไหน ยกตัวอย่างเช่น

  1. รับ HTTPRequest
  2. แปลงเป็นชนิดข้อมูลไม่ว่าจะเป็น Object หรือ Primitive
  3. ตรวจสอบข้อมูลทั้งในเชิง Value Validation และ Type Validation
  4. ทำการบันทึกค่าลง Database

ซึ่งในการแสดงข้อมูลก็จะต้องทำหลายกระบวนการอีกเช่นกัน ซึ่งขั้นตอนเหล่านี้เกิดขึ้นซ้ำแล้วซ้ำเล่าอย่างหลีกเลี่ยงไม่ได้ (นี่ขนาดพูดถึงแค่ฝั่ง Server นะเนี่ย ยังไม่รวมถึง พวก AJAX หรือ RIA) โดยตลอดหลายปีที่ผ่านมาก็มี Framework มากมายหลายหลากผุดขึ้นมายังกะดอกเห็ด เพื่อช่วยให้เราลดขึ้นตอนที่ยุ่งยากในการพัฒนา Web Application ที่กล่าวมาข้างต้น แต่ก็ต้องแลกกับการมี Configuration Files เพิ่มขึ้นมาอยู่ใน Project เช่น Struts, Spring, Hibernate (เพราะนี่คือพื้นฐานของการสร้าง Framework) และแน่นอนไม่มี Framework ไหนจะสามารถตอบโจทย์ของนักพัฒนาทั้งน้อยใหญ่ได้ทั้งหมด บางงานอาจจะต้องใช้ Framework หลายตัวมาใช้งานร่วมกัน (Integrate) แต่การทำเช่นนั้นก็จะทำให้เกิด Configuration Files มากมาย ตัวอย่างนึงที่ดีในการทำให้เห็นภาพปัญหานี้ก็คือ สมมุติว่าเราจะเพิ่มหน้าจอหนึ่ง เราจำเป็นจะต้องเข้าไป Config ในไฟล์หลายตัว (อย่างน้อยก็ struts-config.xml)  แล้วถ้าใน Project นี้ใช้ Hibernate ด้วยล่ะ (Config กระจาย)
จากปัญหาเหล่านี้ Grails ช่วยท่านได้ครับ ลองดูประโยชน์ของ Grails ดังนี้

1. ลดจำนวน Configuration Files
เอาละเว้ย แค่อันแรกก็โดนใจกระผมอย่างแรงครับ เนื่องจาก Grails ใช้แนวคิด Convention Based ทำให้ลดจำนวน Configuration ไปได้มากโข แม้หลายคนจะบอกว่า "เมิงก็ให้ IDE Generate ให้สิ เดี๋ยวนี้มีเป็น Wizard เลยนะเออ" แต่ความจริงแล้ว IDE มันก็แค่พรางปัญหาเหล่านี้ให้เท่านั้นแหละ เพราะความซับซ้อนของมันก็ยังคงเดิม
ซึ่งสำหรับ Grails แล้วมองว่าหากสร้าง Class นึงขึ้นมา (ตามแบบแผนนะ) Class อื่นที่เกี่ยวข้อจะถูก Generate ขึ้นมาโดยมีชื่อ File, Path ที่เป็นระบบขึ้นมาอัตโนมัติ (โอ้โห) ยกตัวอย่าง


 หากเราสร้าง User.groovy ขึ้นมามันก็จะ Generated Configuration File (ซึ่งมีไม่กี่ FIles) แล้วก็ Controller ให้เองภายใต้ Package ที่เหมือนกันเป๊ะ (จอร์จมาก) แต่ทั้งนี้ทั้งนั้น หากไม่ชอบที่ Grails มัน Generate มาให้ก็สามารถเข้าไปเปลี่ยนแปลงได้ตลอดเวลา

2. ไม่ต้อง Redeployed แถมเขียนไม่กี่บรรทัดด้วยนะเออ
อันนี้ก็แจ่มแมวอีก Feature เนื่องจากการพัฒนาด้วย Java ในการ Run แต่ละครั้งอาจจะต้อง Redeploy และ Restart Server ซึ่งบางทีค่อนข้างเสียเวลา แต่เนื่องจาก Grails สามารถ Dynamic Language ได้ซึ่งจะทำให้เราพัฒนา Java ร่วมกับ Groovy ซึ่งมีลักษณะเป็นภาษา Script (ไม่ต้อง Redeploy) ได้ แถมข้อดีของ Groovy ยังมีอีกก็คือ เขียนนิดเดียว ได้ผลเท่า Java (นี่แหละที่เจ็บปวด T^T)

หลังจากการเล่นมาครึ่งวันเจอแค่นี้ คิดว่าอีกไม่นานก็คงจะเจออะไรมากมายที่เป็นประโยชน์ต่อการทำงาน เอาไว้มาแชร์ใหม่นะจ๊ะ ฟริ๊ววววววว!!