วันพุธที่ 15 กรกฎาคม พ.ศ. 2558

Diary 25580715

วันพุธที่ 15 กรกฎาคม 2558

มีประชุมเช้าเกี่ยวกับ project มาฟังว่า requirement นั้นมีอะไรบ้างหน่อ เยอะขนาดไหนกัน
เป็นงานที่เปลี่ยนจากระบบเดิมไปยังอีกระบบใหม่ แต่ต้องทำงานได้อย่างน้อยเท่ากัน และก็เพิ่มเติมในสิ่งที่ยังไม่เคยทำได้ให้ทำได้ด้วย ปรับแต่งนิดหน่อย แต่การไปยังระบบใหม่นี้ แถบจะใช้วิธี migrate data จากเดิมมาไม่ได้เลยน่ะสิ ของเก่าเยอะมาก แล้วต้องมา config ใหม่หมดเลย เยอะจริงๆ

บ่ายมาก็เข้าอบรมละ CMDB กับ SVN เหอะๆ เข้าไปแบบรู้บ้างไม่รู้บ้างละ แต่ที่รู้ก็ต้องขึ้นไปเป็น TA ช่วยพี่เขาละ ก็สนุกดีน่ะ อืม..แต่มีแบบทดสอบก่อนเรียนด้วย หลังเรียนก็มี 555 ส่วนใหญ่ไม่ชอบทำกันเลยละ ไม่รู้ว่าเพราะมาอบรมแบบไม่ตั้งใจมากันหรือป่าว

เริ่มเหนื่อยล้าละนิ กลับบ้านมาจะอ่านหนังสือที่เป็น English ล้วนๆ แล้วไม่เก่งเอาเลย หมดแรงเลยไม่ได้อ่านเลย เซงมากๆเลย...


วันอังคารที่ 14 กรกฎาคม พ.ศ. 2558

Diary 25580714

สวัสดีเช้าวันอังคารที่ 14 กรกฎาคม 2558


เช้านี้รถไม่ติดมากเท่าไร แต่อากาศร้อนน่ะ

วันนี้สลับมาเป็นผู้ช่วยสอน Test Driven Development (TDD) บ้างละ
เริ่มช่วยสอนแบบมึนๆ เหมือนสมองไม่ทำงานเลย นิ่งเฉยๆมากเลย ไม่ไหวๆ
ใช้โจทย์ FizzBuzz แบบง่ายๆ ก่อนโดยทำกันเอง
แล้วต่อด้วยการให้รู้จัก JUnit กันต่อ
เอา FizzBuzz ง่ายๆที่ทำไปแล้วมาใส่เป็น JUnit ละ
ก็จะได้ Test Case ที่เป็นไปตาม Business Requirement ละ แต่ก็มีเกินกันบ้าง เนื่องจากเผื่อผิดพลาดจากการ key input เข้ามา
ต่อมาเพิ่มเงื่อนไขเข้าไปว่า contain 3 ให้ Fizz เพิ่มไป แต่ถ้า Fizz อยู่แล้วไม่ต้อง
contain 5 ให้ Buzz เพิ่มไป แต่ถ้า Buzz อยู่แล้วไม่ต้อง
เช่น
3,6,9,12 => Fizz
5,10,20 => Buzz
15,30,35,51,53,54 => FizzBuzz
พอเจอแบบนี้แล้วเริ่มยากแล้วสิ คิดกันใหญ่เลยละ
แต่เอ๊ะ สังเกตุเห็นว่า JUnit ไม่ใช้กันละ กลับไปใช้ run main กันอีกแล้ว
แล้วสังเกตุทีมที่ไม่ได้ทำ JUnit น่ะว่าจะเห็นเข้า run main ซ้ำแล้วซ้ำเล่าใน case Data Input เดิมๆเลยละ
มาต่อบ่ายกัน
โดน interrupt ไปคุยกับพี่อีกคนเรื่อง TDD, ATDD นั้นสำคัญฉไหน
แล้วกลับมาห้องสอนอีกที
กำลังสอนทฤษฎี TDD อยู่เลยละ
เอา FizzBuzz มาเริ่ม step การทำงานแบบ TDD (Fail,Pass,Refactor) , Simple Rule Design
ตอนสอนต้องแนะนำว่า โจทย์ business นี้เราเข้าใจแล้ว เราก็จะไม่ทำในสิ่งที่ง่ายๆ แล้ว เพราะเรารู้แล้ว
แต่ตอนนี้เรากำลังฝึกอยู่ก็ไม่ค่อยจะมองข้ามสิ่งเล็กๆนี้ และควรจะทำแบบนี้ก่อน แล้วเมื่อไรที่เราเข้าใจดีแล้วก็มองข้ามตรงนี้ได้ แต่ต้องมั่นใจน่ะว่า ข้ามได้จริงๆ
จงทำให้เกิดการทำงานซ้ำๆ หรือ เหมือนกัน 3 ครั้งขึ้นไปแล้วเริ่มยุบให้เหลือ 1 เดียวน่ะ
การสอนเด็ก Junior นี้ น้องๆจะไม่ค่อยถามกันเลย เพราะอาจจะยังไม่เจอของยาก
บางคนก็ไม่ยอมทำ step เล็กๆเลย กระโดด step ตลอดเวลา
บางคนคิดวกไปวนมา เหมือน Business ไม่ clear
ต่อโจทย์ Prime factor ส่วนใหญ่ ลืมกันหมดละคิดเลขกันยังไงหน่อ
แล้วต้องมาทำบน Cyber- Dojo ด้วย คือไรเนี่ย จะได้ไหมหว่า
ทำกันไป error syntax กันไป
ช่วง รีวิว สนใจกันดีน่ะ แต่เหมือนบางคนงงๆเลยอ่ะ
สุดท้ายก่อนกลับก็ให้ทุกคนเขียน
 GOOD BAD TRY

Time box คุมเวลา
Dead air ช่วงเงียบ
CCC=card,conversation, confirmed 
Tdd เริ่มว่า คิดว่าจะทำอะไร,เขียนเทส,เขียนโค้ต

ตั้งเวลาทำงาน จบเวลา retrospective กันเพื่อจะได้สอนว่าที่ทำมีปัญหาอะไร

จะทำยังไงให้รู้จัก  small  step

ตั้งเทสเคสให้เข้าใจก่อน เพื่อให้สื่อถึงปัญหา
แล้วค่อยหาว่าจะทำอย่างไรที่ง่ายๆและเร็ว

What => How <=> Small step

Simple design rules แน้นเรื่อง Duplicate 

คนเรียนมาไม่ครบคู่ ควรให้ ta , co train ลงไปทำให้ครบคู่

ควรสลับคู่ด้วยเพื่อให้ได้เรียนรู้ แต่ต้องดูจังหวะนะ

เช่น ยกทั้งคู่ไปอีกเครื่องเพื่อให้รู้จัก legacy 

คุมเวลาให้ดี  หมดคือหมด เสร็จไม่เสร็จไม่เป็นไร แต่ทำอะไรไหม

พยายามลดเวลาคุยแล้วทำ เพื่อให้เกิดการเริ่มด้วยสิ่งเล็กๆ



Feedback for TDD workshop (2015/07/14)

เรื่องของ Timebox ต้องชัดเจน

เรื่องของ dead air

ตอนให้แต่ละกลุ่มอธิบาย ต่อขึ้นจอเลย

จอไม่ชัด ก็เขียนขึ้นกระดานเลย !!

3C Card Conversation Confirmation

TDD เริ่มด้วยการ THINK ในทุกๆ รอบ

เรื่องการอธิบายให้เข้าใจถึง TDD
- แสดงให้เห็นถึงปัญหา
- นำเสนอการแก้ไขปัญหา
- สอน และ พา ทำ

ให้เน้นเรื่องแนวคิด Small Step
- ให้ลองทำ
- โชว์ให้เห็น ในแต่ละโจทย์

Simple Design Rule เน้นในเรื่อง
- Reduce duplication
- Minimize code

Pairing programming ถ้าขาดคู่ ผู้ช่วยสอนต้องไป pair ด้วยเสมอ
สลับคู่ pair ด้วย

Diary 25580713

สวัสดีวันจันทร์ที่ 13 กรกฎาคม 2558

    วันจันทร์ที่รถในกรุงเทพตอนเช้าจะติดมากๆ

    ถึงที่ทำงานซื้อกาแฟอเมริกาโน่แก้วใหญ่แก้วนึง ที่ร้าน chester's coffee สิทธิลด 50% ทุกวันจันทร์ วันพุธ วันศุกร์

ดูวิดีโอ 



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

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

   Datasource Pool คือ ระบบการจัดการเชื่อมต่อระหว่าง Application กับ Database เพื่อที่จะได้ลดขั้นตอนการเขียน code ให้น้อยลง และเป็นการเพิ่มประสิทธิภาพการจัดการเชื่อมต่อ Database ได้ดีขึ้น Datasource Pool สามารถกำหนดค่า Min, Max, Timeout ได้ (รายละเอียดยังมีมากกว่านี้อีกเยอะ เอาแบบ basic ก่อนละกัน) 
  • Max คือค่าที่ Datasource Pool จะสามารถ create connection database ได้มากที่สุด
  • Timeout คือค่าที่เมื่อเราเขียน code conn.close() แล้ว Datasource Pool จะเปลี่ยน state จาก connected เป็น idle เพื่อเป็นการ standby ใ้ห้ application ที่จะใช้งานได้เข้ามาใช้ได้เลย
  • Min คือค่าที่ Datasource Pool จะเป็น state idle ได้อย่างน้อยสุด
สมมุติว่า
    เราได้ set Datasource Pool ไว้ดังนี้
    - Max=50
    - Min=10
    - Timeout=30minute
    เมื่อ Application เราขอ connection ไป 20 Datasource Pool จะ return ให้กลับมา 20 ที่ state เป็น connected 
    เมื่อ Application เราขอ close ไป Datasource Pool จะเปลี่ยน state จาก connected เป็น idle ทั้ง 20
    เมื่อเวลาผ่านไป 30 minute Datasource Pool ที่เป็น idle จะเหลือ 10 ตามค่า Min

    Thread Pool คือ ระบบการจัดการ Thread ที่จะใช้งานได้ต่อการ run บน JVM นั้นๆ หลักการทำงานก็คล้ายๆกับ Datasource Pool เพียงแต่คราวนี้ไม่ต่อกับ Database แต่เป็นการต่อไปยัง CPU ที่มีให้ใช้งาน

    สอนไปมาก็เกือบเที่ยงละ เลยสั่งงานน้องไปว่าบ่ายนี้ ก็ให้ code มา review กันแล้วปรับให้เข้ากันให้เรียบร้อย

    หัวหน้าถามถึง coach มาสอนกี่วันวันไหนบ้างถามตั้งแต่เดือนเมษายนเลย จำไม่ได้เลยทีนี้ ดีน่ะว่าจดไว้บ้าง ทำให้ต้องเริ่มจดบันทึกรายวันจริงจังละ

    เที่ยงละ ไปเลี้ยงส่งน้องอีกคนที่ลาออกละ เคารพการตัดสินใจของน้อง

    บ่ายกลับมาทำงานต่อ ง่วงมากเลยทีเดียว แต่ก็ต้องทำงานน่ะ หลับไม่ได้ เพราะเรามีงานที่ต้องทำ

    เริ่มด้วยงาน install sonar on ubuntu และ config ให้ jenkin มาเรียกได้ ทำไปก็ง่วงไป fail ไป fail มา อยู่ๆใช้งานได้ซะงั้น ตื่นเลยทีนี้ ต้องมาหาว่า ผ่าน ได้ไงหว่า เพราะงัวเงียทำไป เลยต้องมา check ว่าทำอะไรไปยังไงบ้าง ตรงไหนใช้ได้ ตรงไหนใช้ไม่ได้ จนได้คำตอบแล้วก็สำเร็จ งานลุล่วง

    ลอง run sonar แล้ว code ที่น้องเชียนเป็นไง ตรวจเจอ code ที่เป็น minor ด้วย เลยดูว่าเป็นเรื่องอะไร บอกด้วยว่าเป็นเรื่องการเอา tab มาใช้งานแทนที่จะใช้ white-space เลยลองแก้ไขแล้ว commit ดู พบว่าผ่าน issue นี้ ถูก close ให้อัตโนมัติละ ดีจริงๆ

    มีโจทย์ในใจเพิ่ม ว่า เมื่อ sonar เจอ issue แล้วจะเอา issue นี้ไปเปิดที่ git-lab server ยังไงได้ ??? คิดไม่ออกพักไว้ก่อน (อย่าจมกับปัญหา เพราะเราจะไม่มีวันเจอทางออก)

    เดินไปดู WebSphere MQ หน่อยว่า ปัญหาที่ MQ Explorer ต่อไปยัง IIB9 นั้นใช้งานได้หรือยัง ผลคือยัง error convert lang ไม่ได้ ทำให้ใช้ MQ Explorer ต่อ WebSphere MQ ไม่ได้ แต่ยังดีหน่อยที่ WebSphere MQ ยัง set lang ตามที่ต้องใช้งานได้อยู่ ระบบทำงานได้ถูกต้อง คงต้องให้เปิด PMR ละ

    แนะนำ IBM ว่าถ้าจะใช้ External Monitor(Tivoli) นอกตู้ IBM PureApplication System นั้น ต้องดูเรื่อง requirement ให้ดีว่าลูกค้าต้องการอะไร
    ถ้าต้องการ monitor ธรรมดา ก็ลงเครื่องข้างนอกแบบธรรมดาเลย แต่เมื่อ config ที่ share service นั้นต้องระวังให้ดี เรื่อง check box Auto Restart WAS เพราะเมื่อไรที่ deploy share service นี้ไปแล้วนั้น WebSphere ทั้งตู้ IBM PureApplication  System จะ restart Application Server ทุกตัวทันที ซึ่งอาจจะส่งผลต่อการทำงานของลูกค้า
    ถ้าต้องการมากกว่า monitor เช่น transaction เพิ่มเข้ามานั้น เราต้อง manual config เครื่อง agent ทุกเครื่องที่เราต้องการ transaction นั้น ซึ่งเมื่อมีเครื่องใหม่มา เราก็ต้อง manual config agent เองทุกครั้ง เนื่องจาก share service จะไม่รู้จัก ถามว่าทำ script package เพิ่มได้ไหม ก็ตอบว่า ทำได้อยู่

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