posted on 30 Mar 2008 13:06 by wonam
เมื่อวานว่าง ผมเลยได้ลงมือเขียนของที่อยากเขียนเสียที
ผมต้องการจะทดสอบว่าเว็บที่ทำขึ้นรับโหลดได้มาก/น้อยแค่ไหน ตอนแรกหา tool อยู่ โชคดีคุณ sirn แนะนำให้ลองใช้ siege
ก็ใช้งานได้ดี แต่ว่าเวลาจะทำอะไรที่มันยุ่งขึ้นอีกนิด เช่นจะ post ไฟล์
มันจะยุ่งมาก (เท่าที่ผมลองดู) ผมก็เลยอยากได้ tool ที่มันง่ายสักหน่อย หา
ๆ ดูไม่เห็น (อาจจะมีก็ได้) ทีนี้ ลอง ๆ เล่น cURL ดูก็พบว่าแทบจะทำงานได้อย่างที่ต้องการแล้ว ขาดก็แต่หน้าฉากที่ใช้ง่าย ๆ หน่อย ก็เลยลองนั่งเขียนเล่น ๆ ดู
บังเอิญที่นี่แปะโค้ดลำบาก ขอโฆษณาแค่นี้ เอกสารและหน้าเว็บดูที่เว็บห้องวิจัย ส่วนตัวอย่างโค้ดที่จัดฟอร์แมตแล้วดูที่ codenone นะครับ
posted on 29 Mar 2008 11:22 by wonam
ยกยอดมาเขียนรวมกันเลย
ที่บ้านผมใช้ไฮสปีดอินเทอร์เน็ตของ True พักหลัง ๆ นี่มันสายหลุดบ่อย ยกหูโทรศัพท์ก็ได้ยินแต่เสียงสัญญาณซ่า ๆ ผมลองเปลี่ยนกล่องเชื่อมต่อ (นึกว่ามันไม่ดี) ก็ไม่หาย แต่ว่าถ้าถอดออกมาไขใหม่ ตอนแรก ๆ สัญญาณจะดี (ไปสักพัก) ผมเลยมีกิจวัตรประจำวันก่อนใช้เน็ต คือไขสายใหม่ แทบทุกวัน
ผมเดินออกไปดูสายนอกบ้านที่เดินมาก็เห็นว่ามีหลาย ๆ จุดที่มันดูท่าจะพันไว้ไม่ค่อยดี บ้านผมมีการย้ายสายโทรศัพท์หลายครั้ง สายที่เดินนอกบ้านก็ไม่ใช่ของ True การเดินสายก็ไม่รู้ใครทำ
สุดท้ายมันใช้ไม่ได้จริง ๆ ก็เลยโทรแจ้งกับทางบริษัท แจ้งทั้งสัญญาณโทรศัพท์ไม่ดี แล้วก็อินเทอร์เน็ตหลุดบ่อย ก็เลยมีพนักงานมาดูให้ เขาก็ไล่ไปไล่มา ปีนป่าย ตัดสายฟังสัญญาณ หลายจุดเขาเอาบันไดไม้ไผ่สูงพาดสายไฟ ดูแล้วก็รู้สึกหวาดเสียวเหมือนกัน
ตัดฟังอยู่สองสามที่ เขาก็พบว่ามีจุดหนึ่งน่าจะเป็นจุดปัญหา เขาก็ตัดแล้วก็พันใหม่ให้
ตอนนี้สัญญาณก็ใสปิ๊ง อินเทอร์เน็ตก็พุ่งฉิวสมที่เป็น hi-speed เสียที
พอมาถึงตอนจบ ผมคิดว่าเขาน่าจะคิดค่าบริการบ้าง เพราะว่าสายที่เดินก็เปลี่ยนใหม่ แม้จะเป็นการเดินนอกบ้านก็ตาม สรุปว่าเขาก็ไม่ได้คิด ผมคะยั้นคะยอจะให้ค่าบริการกับเขา (เป็นการส่วนตัว) เพราะว่ารู้สึกถึงความเสี่ยงที่เขาต้องเจอ ตอนที่มาแก้สายให้ผม เขาก็ไม่รับ เขาบอกว่า "มันเป็นหน้าที่"
ไม่ได้ยินคำนี้มานานเหมือนกัน...
ผมไม่ทราบว่าพนักงานปีนป่ายเช่นพี่ชายคนนี้เงินเดือนเท่าใด แต่ทางบริษัทเขาอบรมมาดีจริง ๆ แล้วก็น่าจะหมายความว่าน่าจะมีสวัสดิการที่พอเพียง ที่ทำให้พี่ชายคนนี้ยึดมั่นกับคำว่าหน้าที่ได้เป็นอย่างดี
เรื่องบริการสุดยอด ถ้าจะให้เอ่ยถึงแต่ทางพนักงาน True ที่เพิ่งไปพบมาก็คงจะขาดตกอะไรไปเหมือนกัน
ผมมีปัญหากับเครื่องเซิร์ฟเวอร์ Dell ที่เพิ่งจะซื้อมาไม่นาน โทรไปหา support เขาก็บอกให้ทำโน่นทำนี่สุดท้ายแก้ไม่ได้ ผมก็นั่งเศร้า (ตอนนั้น 5 โมงแล้ว) พักเดียว มีโทรศัพท์เข้ามานัด บอกว่าจะมีพนักงานเข้ามาดูให้คืนนี้ถ้าผมว่าง
ไม่นานตอนค่ำก็มีพนักงานส่งของเอาอะไหล่มาส่งให้ก่อน เป็น mainboard แล้วก็อะไรไม่รู้อีกสองกล่อง พนักงานซ่อมก็ตามมาในอีกไม่นานนัก ซ่อมได้สักพักก็พบว่าปัญหาเกิดจากที่ฝั่งผมเอง (อีกแล้ว) ตัว keyboard มันคงจะเก่าแล้วก็ช๊อตอะไรสักอย่างเลยทำให้เครื่องมันบูตไม่ได้ (เจอต้นตอปัญหานี้โดยบังเอิญอีกต่างหาก) แต่ความรวดเร็วในการแก้ไขปัญหา การที่ "ทำทุกอย่าง" ที่จะช่วยแก้ปัญหาให้กับลูกค้า เป็นสิ่งที่ผมสังเกตได้จากการให้บริการของทาง Dell
ใครลองเจอแบบนี้ก็คงจะประทับใจไปอีกนาน
posted on 27 Mar 2008 12:22 by wonam
ฉันอยู่ทุกทุกที่
ฉันไปทุกแห่งหน
ทุกก้าวย่างที่ฉันไป
ฉันเปลี่ยนแปลง
ฉันทำลาย
ฉันสร้างสรรค์
ภายใต้พระนามของเทพเจ้าสององค์
ความสม่ำเสมอ
และความแปลกแยกแตกต่าง
หมายเหตุ: สำหรับข้อเขียนเล็กน้อยไม่ต่อเนื่อง รวมถึงรูปถ่ายไม่ประจำทาง ส่วนมากจะไปแปะที่ wonam.tumblr.com นะครับ
posted on 23 Mar 2008 13:24 by wonam
คราวก่อนจะลอง load test เว็บสำหรับการแข่งขันเขียนโปรแกรมที่พัฒนาขึ้น คุณ sirn เคยแนะนำให้ใช้ siege ซึ่งเมื่อทดลองแล้วก็ใช้ได้ดีเลยทีเดียว
คราวนี้มีความต้องการมากขึ้น เนื่องจากเว็บที่ใช้ก่อนจะทำอะไรได้ต้อง log in นอกจากนี้ ผู้ใช้ยังจะต้องส่งโปรแกรมเข้ามายังเว็บ นั่นก็คือมีการ POST มายังเว็บด้วย
ทีนี้การจะเขียนลักษณะดังกล่าวบน siege รู้สึกว่าจะทำได้ยาก เนื่องจากต้องมีการจำ cookies อะไรพวกนี้ด้วย
พอไปดูตัวอื่น ๆ เช่น Grinder รู้สึกว่ากว่าจะใช้ได้คงตายเสียก่อน
เมื่อเช้าผมก็เลยคิดว่าจะเขียนเอง ก็ไปเปิดอ่านไลบรารี Net::HTTP ของ Ruby เรียบร้อย กด google อีกหน่อยหาว่าจะ upload file อย่างไร กด ๆ ก็พอหาเจอคร่าว ๆ พบว่ามีคนบนมาเยอะว่าต้องทำเองเสียเยอะ อ่านเจอเห็นว่ามีคนหนึ่งเขียนไปเรียกโปรแกรมที่ชื่อว่า cURL ก็เลยคิดว่าน่าจะลองดูสักหน่อย
พอเข้าไปอ่านหน้า Using cURL to automate HTTP jobs ก็พบว่าเจ้า cURL มันจัดการ cookies ได้ดีทีเดียว สุดท้าย ตอนนี้ผมก็เลยใช้วิธีเดียวกับคนดังกล่าว คือส่วน load page ก็ไปเขียน ruby เพื่อเรียกเจ้า cURL เอา
ส่วน command line ที่ใช้เรียกเพื่อ login กับที่ใช้ post ก็เป็นประมาณนี้ครับ (แปลงมาจากหน้าของ cURL ด้านบน)
curl -D mycookie -d "login=name&password=mypass" http://mysite/login
curl -b mycookie -F file=@myfilename http://mysite/submit
คำสั่งแรกจะ login แล้วก็เก็บพวกข้อมูล cookies เอาไว้ใน mycookie คำสั่งสองจะ post ข้อมูลจากไฟล์ myfilename โดยใช้ข้อมูลของ cookies มาจากคำสั่งแรก เครื่องหมาย @ ที่นำหน้าบอก cURL ให้โหลดข้อมูลจากไฟล์
posted on 15 Mar 2008 12:46 by wonam
หลายคนคิดว่านักพัฒนาที่ใช้แนวทางการพัฒนาแบบ agile จะทำงานสนุกสนาน
ไม่ได้เน้นเรื่องวินัยในการทำงาน แต่จริง ๆ แล้วคงไม่ใช่
กว่าที่นักพัฒนาจะเขียนแต่ละบรรทัดของโปรแกรมได้ นักพัฒนาต้องเขียน unit
test เสียก่อน ก่อนที่จะ check-in โปรแกรมเข้าสู่ระบบได้
นักพัฒนาต้องแก้จนทุก ๆ unit test ทำงานผ่านเสียก่อน นอกจากนี้ยังต้องทำ
automated acceptance test กับลูกค้า
แน่นอนการที่มีวินัยไม่ได้แปลว่าต้องมีเอกสารเยอะ (ย่อ ๆ มาจากบางส่วนของวีดีโอด้านล่าง ที่บรรยายโดย Elisabeth Hendrickson)
posted on 14 Mar 2008 22:31 by wonam
ลอง
เล่น แบบสั้น/หลากหลาย/ไม่ต่อเนื่อง
posted on 12 Mar 2008 07:41 by wonam
ผมเขียน script ที่ช่วย import ข้อมูลในรูปแบบที่จัดการง่ายเข้าสู่ระบบที่กำลังพัฒนาอยู่
script ดังกล่าวเป็น script สั้น ๆ ทำงานที่ต้องทำซ้ำ ๆ แล้วก็ช่วยอะไรได้มากทีเดียว พอเขียนเสร็จแล้วก็ได้นำไปใช้ก็พบว่าช่วยได้มาก
อย่างไรก็ตาม...
เมื่อ script ทำงานเสร็จแล้ว มันมีงานอีกขั้นหนึ่งที่ต้องไปทำเอง หลัก ๆ ก็คือการแก้ส่วนของระบบที่ตรวจคำตอบของโปรแกรม ในส่วนนี้ผมคิดว่าต้องทำเอง script ไม่สามารถตัดสินใจเลือกให้ได้ว่าข้อสอบข้อนี้จะตรวจคำตอบอย่างไร
ในตอนแรกที่เขียนก็เลยคิดว่าให้ script มันทิ้งไว้ให้คนที่ import มาจัดการเอง ในระบบก็พยายามทำ warning เอาไว้ ถ้านำระบบไปใช้งานโดยที่ลืมทำขั้นตอนสุดท้าย คนที่ import จะได้รู้ว่าลืม แล้วจะได้ตามมาแก้ทีหลัง
ทีนี้ ทุกครั้งที่ผม import ผมก็จะต้องลืมทำขั้นตอนสุดท้ายนี่ทุกที
พอจะใช้งานของที่ import มาครั้งแรกก็จะพบกับปัญหาที่ลืมขั้นตอนสุดท้ายตลอด แล้วก็ทุกครั้งผมก็เตือนตัวเองว่า เอ้ย ครั้งหน้าห้ามลืมนะ
เมื่อวาน ก่อนนอน นึกได้ ทำไมเราไม่แก้ script ให้มันบังคับให้เราทำขั้นตอนสุดท้ายนะ?
โดยทั่วไป มันก็มีการตรวจคำตอบได้ไม่กี่แบบ แต่ก็มีบางครั้งที่การตรวจคำตอบต้องทำเป็นพิเศษ แล้วคนที่ออกแบบระบบมาได้ออกแบบมาให้แก้ไขตรงนี้ได้ง่าย
ผมก็เลยสร้าง template ของการตรวจคำตอบเก็บไว้ แล้วบังคับให้เวลาสั่ง import ต้องระบุ template หรือไม่ก็ให้ระบุ script ที่จะไว้ใช้ตรวจคำตอบเลย
คาดว่าน่าจะตัดปัญหาลืมขั้นตอนสุดท้ายไปได้
จากเรื่องนี้... สิ่งที่ลืมไปในตอนแรกก็คือ interface ที่ดี น่าจะช่วยตัดปัญหาความผิดพลาดที่เกิดจากผู้ใช้ได้ (ไอ้เราก็มัวแต่โทษตัวเองว่า ทำไมขี้ลืมจังนะ --- จริง ๆ กลับต้องโทษว่า ทำไมไม่ออกแบบให้มันดีกว่านี้นะ)