Tag Archives | ภาษา

Two approaches – Mock/Stub

เรื่องนี้พึ่งย่อยเสร็จแต่เป็นสิ่งที่คุยกับ @visibletrap ตั้งแต่วันแรกที่มาถึงสิงคโปร์ (คุยทีเดียวหลายเรื่อง ล่อไปสามชั่วโมงได้ ฮ่าๆ) เรื่องก็มีอยู่ว่าเวลาทำ TDD หลายค่ายมักบอกว่าให้ทำ Mock ซึ่งก็เคยพยายามทำหลายครั้งแต่ก็ไม่ประสบความสำเร็จเสียทีเพราะรู้สึกมันทำให้เขียนอะไรซ้ำหลายอย่าง วันนั้น @visibletrap ก็เลยอธิบายและคุยจนเคลียร์ว่าเค้าใช้ Mock เมื่อไหร่กัน วิธีการทำระบบอะไรซักอย่างปกติก็มีอยู่สองทางในการสร้างขึ้นมา คือ Top-Down / Bottom-Up วิธีที่คุ้นเคยสุดเพราะอะไรไม่รู้อาจจะเพราะที่เรียนมาในมหาวิทยาลัยต่างๆ ในวิชา SE ที่บอกว่าให้หาคำนาม บลาๆๆ ก่อนคือ Bottom-Up เริ่มจากหาว่าในระบบจะมี Model อะไรบ้าง แล้วหา Behavior เพื่อสร้างคลาสขึ้นมาทั้งหมดให้ครบทั้ง Flow โดยเริ่มจากฐานที่เป็นคำนาม จนถึงชั้นบนสุดที่เป็นส่วนติดต่อกับ User วิธีที่จะสร้าง Test กับระบบแบบนี้ง่ายสุดก็คือสร้าง Stub ขึ้นมาให้ทำหน้าที่แทน Third-party คอยให้ข้อมูลต่างๆ เพื่อให้ระบบทำงานได้ถูกต้องตลอด ปัจจุบันก็ยังคงชินกับการสร้างระบบด้วยวิธีนี้อยู่ เวลาทำอะไรก็เลยมักสร้าง Stub ขึ้นมาก่อน แล้วค่อยๆ ไล่จาก Model ขึ้นไปจนถึง User [...]

Read full story Comments { 1 }

Less behavior, more case

คำเตือน blog นี้เขียนเพื่อบ่นการทำงานโดยเฉพาะ! ช่วงนี้ประชุมเยอะ เลยคิดอะไรได้นิดหน่อยเนื่องจากพยายามจะจำกัดให้ Project ไม่โตเกินไปแต่รู้สึกจะห้ามไม่ได้เท่าไหร่ เคย Tweet ลอยๆว่าจริงๆ ควรทำระบบในรูปแบบกลับด้านจากเผื่อเหลือ ให้เป็นระบบที่ยังขาดบางอย่างอยู่ซะ แต่ก็ไม่ได้คิดต่อว่าเพราะอะไรจนช่วงนี้แหละที่ประชุมรวบรวมว่าระบบต้องทำอะไรบ้างถึงเขียนยาวๆ ได้ เนื่องจากระบบที่ทำอยู่ เป็นระบบที่ใหญ่มากประกอบด้วยการทำงานจากชั้นย่อยๆ หลายๆส่วน มีพฤติกรรมล้านแปดจาก Marketing เมื่อจะเริ่มทำเจ้าของระบบก็เอา Requirement ทั้งหมดมาแปลงเป็น Design ขนาดใหญ่เพื่อให้ระบบทำตาม Requirement/Bahavior ได้ทั้งหมดตั้งแต่เริ่มต้น!!! ซึ่ง Requirement ก็เปลี่ยนแปลงไปมาเพิ่มนู่นนี่จนปัจจุบันก็ยังไม่ได้ Finale design ที่สมบูรณ์พร้อมที่จะให้ Programmer ตาดำๆ ไปเขียนหรือแบ่งส่วนให้ชัดเจนเสียที เพราะรายละเอียดจุกจิกทั้งหลายมักจะโผล่มาจากคนนู้นทีคนนี้ทีจนมันไม่เสร็จ ก็เลยคิดได้ว่า จริงๆแล้วถึงแม้ระบบมันจะใหญ่ขนาดไหนก็ตาม มันควรจะตัด Behavior พื้นฐานแล้วค่อยๆทำก่อน ไม่จำเป็นต้องออกแบบหรือคิดถึง Behavior ทั้งหมด เมื่อได้ชั้นต่างๆ ที่มีหน้าที่ชัดเจน มี test(case) ครอบคลุมแล้วเราถึงค่อยทำ Behavior เพิ่ม การออกแบบก็ไม่ใช่ออกแบบทั้งหมดตั้งแต่ต้น แต่ต้องทำเพื่อให้มันค่อยๆ เพิ่มได้เพราะงั้นสิ่งที่ควรทำจริงๆ คือ [...]

Read full story Comments { 2 }

Text Editor

ช่วงหลังเขียน Actionscript/Javascript บ่อยขึ้นปัญหาอย่างหนึ่งของภาษาพวกนี้คือ IDE มักกากส์เพราะด้วยคุณสมบัติของภาษาเองนั่นแหละ ตอนนี้เลยใช้ Textmate ซะส่วนใหญ่ ไม่ต้องใช้ autocomplete อยู่แล้วด้วย แต่ปัญหาอย่างนึงของ Textmate คือมันถูกทอดทิ้งมานาน จะบอกว่า Stable แล้วก็ได้แต่เป็นปัญหาที่ OS เองที่พออัพเกรดมาเป็น Snow leopard/Lion ทำให้แถบ file มักหายไป(กระเด็นหลุดจากขอบของ Text editor) สองสามวันนี้เลยลองสำรวจหา Text editor ตัวอื่นซักหน่อย Espresso: เป็นตัวแรกที่คิดถึงเพราะมี license จาก Bundle อยู่ด้วยเป็นทางเลือกที่เป็นไปได้มากสุดตอนนี้ เพราะเป็น TextEditor จริงๆ คุณสมบัติก็คล้ายๆ กับ Textmate แม้หลายอย่างจะทำเทียบเท่าไม่ได้(พวก shotcut ทั้งหลาย ติด Textmate แล้วอ่ะ) Coda: เป็นตัวเลือกที่มองถัดมาจาก Expresso แต่มี feature มากมายทั้ง integrated [...]

Read full story Comments { 2 }

Regular expression กับภาษาไทย

วันศุกร์กำลังนั่งทำงานอยู่ แล้วก็คิดไปคิดมาว่าสิ่งที่ต้องทำคือการตรวจสอบว่า ข้อความที่ส่งเข้ามานี่มีตัวอักษรประหลาดพวก *^#$… อะไรพวกนี้อยู่หรือป่าว ปกติก็ลองกับภาษาอังกฤษธรรมดา เวลาใช้ regular expression ตรวจก็จะมีรูปแบบประมาณว่า \w ซึ่งเหมือนกันทุกภาษา แต่พอใช้ภาษาไทยปรากฏว่ามันตรวจสอบโดยใช้รูปแบบด้านบนไม่ได้นี่สิ เลยต้องขุดเพิ่มเติมนิดหน่อยแล้วก็เจอตัวนี้เข้า \p{…} รูปแบบนี้เป็นตัวบอกว่าจะใช้กลุ่มรูปแบบที่เกี่ยวกับ unicode นะ คราวนี้ถ้าต้องการตรวจสอบภาษาไทยก็ใส่เป็น \p{L} แต่ปัญหามันไม่จบแค่นั้น ถ้าใส่แค่ L มันจะเอาเฉพาะที่เป็นพยัญชนะ พวก สระ และ วรรณยุกต์ ถ้าเจอมันจะบอกว่าผิดรูปแบบทันที แต่คำภาษาไทยมันรวมพวกนั้นเข้าไปด้วยหนะสิ ก็เลยต้องแก้รูปแบบอีกทีเป็น [\p{L}\p{M}] โดย M ที่ใส่มาก็เพื่อบอกว่าเอา สระ และ วรรณยุกต์ด้วยนั่นเอง สำหรับรายละเอียดเพิ่มเติมอ่านได้จากเว็บนี้ http://unicode.org/unicode/reports/tr18/ จะมีพวกตัวอักษรตัวเล็ก ตัวใหญ่ … อีกมากมายในภาษาอื่นๆ ด้วยลองไปดูเอาละกันครับ นอกเรื่อง: ส่วนนี้พูดถึง serialize ของจาวาหน่อย เพราะวันศุกร์ไปปล่อยความงี่เง่าส่วนตัวใส่เพื่อนแหะๆ ปกติเวลา serialize วัตถุอะไรในจาวาก็จะให้คลาสของ วัตถุนั้น implements [...]

Read full story Comments { 1 }

bc

ในห้อง #ubuntu-th มีบอทอยู่ตัวนึงของ willwill คราวนี้มันมีความสามารถพิเศษอยู่อย่างคือคำสั่ง math โดยจะเรียกไปที่โปรแกรม bc ตอนแรกผมก็นึกว่ามันเป็นคำสั่งที่ให้คำนวนเลขธรรมดา แต่ด้วยความสงสัยด้วยว่าอะไรคือ bc เลยลองเปิดใน Terminal เครื่อง mac(ปลอมๆ) ที่ทำงานซะหน่อย แล้วก็ได้ด้วย เปิดมาตอนแรกก็เล่นไม่เป็นเลยต้องไปหาผู้ชาย(man) มาช่วยซะหน่อยเลยรู้ด้วยเลยว่า bc มันคืออะไร bc – An arbitrary precision calculator language แล้ว bc มันมาจากตัวไหนของชื่อเต็มหละฟะ ช่างมันเพราะที่น่าสนใจมันไม่ได้อยู่ตรงนี้ แต่มันสามารถเขียนโปรแกรมในนี้ได้เลยโดยรูปแบบภาษาก็คล้ายๆ ภาษาซี แต่ไม่ได้ใช้ compiler เท่านั้นเองเพราะอันนี้พิมพ์ประโยคเสร็จกด enter ผลลัพธ์กลับมาเลยเช่น llun@pluto:~$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free [...]

Read full story Comments { 2 }