อยากเขียนเก็บไว้ซักหน่อย ประสบการณ์หนึ่งเดือนครึ่งหลังจากทดลองใช้จริงจัง ตอนนี้สามารถบอกได้ว่า อะไรเสร็จบ้างไม่เสร็จบ้าง ความคืบหน้าชัดเจน สามารถบอกความสามารถของคนในทีมได้ ว่าทำอะไรได้เร็วแค่ไหน ใช้เวลาเท่าไหร่ TDD เข้ามาช่วยบอกเรื่องความชัดเจนของ Module/Class ว่าแต่ละชั้นมีหน้าที่อะไร ทำอะไรซ้ำซ้อนหรือป่าว (ถ้าเขียน UnitTest ซ้ำกันเมื่อไหร่ก็บอกได้หละว่ามีบางชั้นที่ซ้ำซ้อนกัน) เมื่อมีบั๊กสามารถบอกได้ว่ามันผิดพลาดที่ชั้นไหน เพิ่ม Input เข้าไปจนทำให้บั๊กมัน Reproduce ได้เร็ว แก้ได้เร็ว ด้านบนคือสิ่งที่ประทับใจและสำเร็จไปแล้ว ปัญหาตอนนี้คือ เหนื่อยเพราะต้องคอยวางแผนและติดตามงานเป็นรายวัน เพื่อกะเวลาบางอย่างแล้วแจกงานไป จริงๆ จะ list งานออกมาแล้วค่อยๆ ให้ไปเลยก็ได้ แต่สิ่งที่จะไม่ได้กลับมา คือแต่ละคนมีปัญหาอะไรบ้าง แล้วจะแก้ร่วมกันยังไง รวมถึงจะกะเวลาจริงไม่ได้ด้วย ขัดแย้งกับคนอื่นมากขึ้น ช่วงนี้ต้องคอยชักชวน และคอยตัดห้ามใครเข้ามารบกวน Process บางอย่างที่ยังไม่ต้องทำ ก็ยังไม่เอาเข้ามา แม้จะโดนบอกว่าอยากได้แค่ไหน ก็ต้องตัดไม่ให้มันเข้าไปถึง Dev ด้านล่างต้องหาทางผลักมันออกไปในช่วงเวลาถัดไปให้มากที่สุด ไม่ให้แผนเวลาเสียไป ความสามารถในการ Review Code เริ่ม Drop หลังจากเพิ่มคนที่เข้ามาทดลอง หลังๆ นี่เริ่มปล่อยไม่สามารถดูละเอียดได้จริงๆ [...]
HTML5 Application Cache
Feature นึงใน Kindle Reader ที่ทำให้สงสัยมากตอนเล่นครั้งแรกคือทำยังไงถึง Bookmark เป็น App ใน iPad แล้วพอเปิดขึ้นมาแบบ Airplane mode ยังสามารถทำงานได้อยู่โดยไม่ต้องต่อเนท เคยลองทำเว็บเล่นเองพอ Bookmark iPad ก็ไปโหลด resource ใหม่อยู่ดีจนไม่นานมานี้ทำ Project ทดลองจริงจังจึงพบว่า มี Feature นึงใน Browser รุ่นใหม่ๆ เรียกว่า Application Cache Feature นี้ใช้ได้เฉพาะ Safari, Chrome และ Firefox เท่านั้น IE9 ยังไม่รองรับ (ส่วน Opera ยังไม่ได้ลอง) เพราะงั้น Project ทดลองเลยบอกไว้เลยว่าไม่รอบรับ IE (เพราะมันเล่น Offline ไม่ได้นั่นเอง) หน้าตาเว็บที่ใช้ Application cache ก็จะมีหน้าตา HTML ตามด้านล่าง [...]
Define Test
อาทิตย์ที่ผ่านมาเริ่ม Push TDD ให้ทีม Dev ทั้งทีมก็มีเสียงตอบกลับมาทันที ซึ่งเป็นสิ่งที่อยากได้และจะได้เอาไปปรับปรุง เสียงตอบอันนึงที่กลับมาถูกบล๊อกโดย @teerapapc ผ่านหัวข้อนี้ “My experience with unit testing in software development” สรุปสั้นๆ คืออยากให้คนอื่นเป็นคนเขียน Test ในตอนท้ายของบทความ จริงๆ เรื่องเขียน UnitTest สำหรับ Dev หลายคนที่พึ่งจบออกจากมหาวิทยาลัยและเขียนโปรแกรมเล่นตามสิ่งที่สนใจ มักเป็นสิ่งที่อยู่ห่างไกลกันเหลือเกิน แม้แต่ตัวเองตอนจบใหม่ๆ และทำงานได้สองสามปีแรก ก็ไม่รู้ว่าจะเขียน Test ยังไงเพราะขั้นตอนการทำงานเริ่มจาก ได้ Requirement มาจาก Manager จากนั้นก็เริ่มเขียน Module ต่างๆ ตามที่คิดไว้ ลองรันดูว่ามันทำงานถูกต้องตามที่ Manager ให้มามั้ย ปิดเคส ด้านบนคือช่วงก่อนที่จะมี QA ช่วงที่มี QA เข้ามาก็จะมีขั้นตอนเพิ่มก่อนปิดเคสคือ ส่งให้ QA เล่น จากนั้นงานก็จะเด้งเป็นปิงปองซักพัก [...]
QA & Support
หลังจากทดลองเปลี่ยน Process ต่างๆของทีม Dev ไปตัวละครที่แทบไม่ได้กล่าวถึงเลยคือฝ่าย Support และ QA ที่ไม่ค่อยพูดถึงเพราะยังนึกไม่ออกว่าหน้าที่จริงๆของสองฝ่ายหนี้คืออะไรบ้าง ควรจะรู้อะไรแค่ไหน แต่วันนี้ถกเถียงเรื่อง Process อีกครั้งก็เริ่มคิดจะเปลี่ยนอะไรบ้างอย่างอีกครั้งและเริ่มนึกถึงสองฝ่ายนี้มากขึ้น เริ่มจาก Process ที่เคยเขียนทิ้งๆ ไว้หลายบล๊อกช่วงก่อนมีอยู่เรื่องนึงที่ถูกเถียงตกมามากคือ Task ที่จะไม่ให้เปิดค้างไว้หลัง Milestone สิ้นสุด ที่ถูกเถียงกลับมาเพราะว่า Task เหล่านี้ไม่สามารถ Guarantee ได้ว่ามันจะทำงานถูกต้องและปิดได้จริงคราวที่แล้วบ่นและเถียงกับพี่ที่ทำงานไปรอบนึงแต่ไม่ได้จดไว้มันเลยหายไป สิ่งที่คิดว่าเปลี่ยนไปคือตอนนี้งานทั้งหมดจะถูกแบ่งเป็นสองส่วน คือ งานที่เกิดจาก Requirement และ Bug จาก QA งานส่วนนี้แหละที่มีปัญหา เพราะว่าคนที่บอกว่าเสร็จไม่ใช่ Dev แต่เป็น QA เพราะงั้นการจะบอกว่า Milestone จบโดยการยึด Bug/Feature จาก Task กลุ่มนี้จะทำให้ Milestone ที่กำหนดตามเวลา ปิดได้ตามกำหนดแทบจะเป็นไปไม่ได้เลย หาก Dev process ปัจจุบันยังไม่สามารถ Guarantee ได้ว่า [...]
HTML5 Drag&Drop
เมื่อคืนช่วงที่เขียนเรื่อง IAAS/PAAS จริงๆ มีเรื่องนี้อยู่ในหัวด้วย มันมาตั้งแต่ตอนทำ Scrumboard ให้ลาก Task ได้แต่ไม่มีเวลารวบรวมซักที ช่วงเช้ายังว่างๆ ไม่มีใครมาเลยจดไว้ก่อนละกัน วิธีการใช้งาน HTML5 Drag&Drop แทบจะเหมือน Flex เป๊ะชื่อฟังก์ชั่นหรือ event นี่ลอกมาแทบจะไม่ต่าง (หรือจริงๆ Adobe อาจจะเป็นคนผลักมันออกมาเป็น Standard) Event พื้นฐานก็มี (@plutoniix แย้งมาตาม comment ว่ามาจาก MS ต่างหาก) dragstart: ใช้กับ DOM ที่จะลากเพื่อบอกว่า DOM นี้มีคนกดลากแล้วนะ dragend: ใช้กับ DOM ที่ลากไปมาได้เหมือน dragstart เกิดเมื่อตอนปล่อยเม้าส์จาก DOM ที่ลากไปมา dragover: ใช้กับ DOM ที่จะเป็นตัวรับ DOM ที่ลากไปมา เกิดตอน DOM อื่นถูกลากมาเหนือ DOM [...]