[JAVA] Pass By ?

ปัญหานี้น่าจะเป็นปัญหาที่โลกแตกพอสมควรครับ และเป็นเรื่องที่ควรรู้ และเข้าใจครับ ไม่งั้น เวลาเจอ Defect อยู่ๆข้อมูลเปลี่ยนเฉย ผีหลอก หรือป่าว ไม่ใช่ครับ เราอาจจะเข้าใจผิดมาตลอด ตอนเรียน 2 ปีแรกที่มหาวิทยาลัย สิ่งที่ผมเข้าใจเกี่ยวกับ pass by ของ Java คือ พวก Primitive Data Type เป็นการ Pass by Value ครับ พวก Reference Type อย่าง Object เป็นการ Pass by Reference แต่ที่ผมเข้าใจมาผิดหมดครับ มารู้จริงๆ ตอนฝึกงานครับ เจอคำถามของพี่เลี้ยงไปจุกครับ พี่เลี้ยงเค้าบอกว่า Java ไม่ว่าเป็น Primitive Data Type หรือ Reference Type มีการ Pass by Value เท่านั้นครับ หลายคนน่าจะงงกัน มาลองดูกันครับ Primitive Data Type Pass by Value ไม่น่าจะงงกัน Reference Type อย่าง Object นี่ คือ Java ไม่ได้ Pass by Reference ตรงๆ แต่ Pass Reference Type by Value เอาง่ายๆ Copy Reference ครับ ลองดูจากตัวอยาง Code ได้ครับ package com.debuggingsoft.testpassby; public class TestPassbyReference { public static void main(String[] args)…

การทำหรือเผา Data Dictionary ที่มีประสิทธิภาพ

ตอนนี้โปรเจคที่ผมกำลังเข้าช่วงโค้งสุดท้ายในการลงนาม ตรวจรับ สิ่งที่สำคัญที่สุด คือ การเผา เอกสารครับ ตอนนั้นมีเอกสารในส่วนของฐานข้อมูล ผมขอเรียกมันว่า Data-Dict นะครับ ตอนแรกทีมที่ทำก็อึ้งๆ เนื่องจากโปรแกรมมีมานานและ 20 กว่าปี แต่ไม่เคยมี Data-Dict ที่สมบูรณ์สักที ทำไมทำมาได้ 1100 Table เพราะ มีหนี้ทางเทคนิค Technical Debt ที่เกิดจาก แต่งาน Customize เสริมยังดีที่มีการทำ Data-Dict มาแล้ว ก่อนตะแก้ปัญหา เราต้องดูก่อนว่ามี Resource อะไรบ้าง สิ่งที่ต้องทำ เผา Data Dictionary  ทันใน 1 สัปดาห์ ทั้งๆที่ แต่ละ มีงาน End Pharse หลังโปรเจคจบ งานจบ แต่ SA กับ Dev ยังต้องเก็บกวาด สิ่งที่เกิดขึ้นจากการ Estimate Time ที่ผิดพลาดครับ T……T

Inversion of Control (IoC)

Inversion of Control หรือ IoC มันเป็นจุดขายของตัว Spring Framework จนหลายๆเจ้าเอาไปปรับใช้เข้ากับ Product ของตัวเองครับ (Microsoft ASP.NET MVC ก็ใช้นะ) ก่อนจะไปใช้กัน เรามารู้กัดีกว่า เจ้าตัว Inversion of Control หรือ IoC มัน คือ อะไรครับ Inversion of Control หรือ IoC คือ อะไร มีประโยชน์อย่างไร มันมีมาเพิ่มลดความผูกแน่นติดกันของ Object ครับ ตาม Quote นี้เลย Do not call us we will call you ใช้ฉีด Object เข้าไปในตอน Runtime ครับ ไม่ต้องมาวุ่นวายกับการจัดการ Obeject ครับ ถ้าใช้มันถูกฉีดเข้ามาเอง ช่วยเพิ่มความสามารถในการ Test ได้มากขึ้น เพราะ มันไม่ผูกติดกันแล้ว Re-used Code ในส่วนของ Business Logic ครับ แล้ว Inversion of Control (IoC) กับ Dependency Injection เกี่ยวกันยังไง มองง่ายๆครับ Inversion of Control (IoC) มัน คือ แนวคิด เรามี Idea ว่าจะทำให้ Code มัน Maintain ง่าย Test ง่ายๆ และไม่ต้องมาวุ่นวายจัดการ Object Dependency Injection จาก Inversion of Control (IoC)…

[WordPress] Migrate SEO จาก Plugins All in one SEO Pack เป็น Yoast SEO

ช่วงนี้เว็บ WordPress ดูอืดๆครับ และก็ไปสะดุดลิงค์ของเว็บ 9Tana ด้วย ทำไมเวลาแชร์ลิงค์ลง Facebook ถึงมี By … ติดมาด้วย ด้วยความอยากได้ ผมเลยสอบถามจากคุณเตย แห่งเว็บ wpthaiuser ครับ ได้แนะนำ Plugins ตัวนี้ครับ Yoast SEO โดยสามารถดูวิธีการได้จากลิงค์ “Yoast SEO กับ Facebook แชร์ยังไง ให้แสดงข้อมูลตามที่เราต้องการ” ครับ มารีวิวการ Migrate SEO จาก Plugins All in one SEO Pack เป็น Yoast SEO ดีกว่าครับ ง่ายกว่าของเก่าเยอะครับ ของเดิมเหมือนนานมาแล้ว การย้ายทีนึงต้องไปแก้ไข Code และ Update Field ใน Database ด้วย คราวนี้ง่ายเลยครับ Backup ข้อมูลครับ กันไว้ดีกว่าแก้ครับ หาตัว Plugins มาก่อนครับ ลง และ Activate โอ้ววว มัน Detect เจอครับ ว่ามี Plugins 2 ตัว Activate พร้อมกัน ถามว่าจะให้ import ไหม กดอันล่างของ Yoast เลยครับ ถ้าเป็นของเดิมที่เคยทำนี้ต้องอัติโนมือครับ Query ล้วนๆ กด Import โลดครับ และลบไฟล์ขยะทิ้งด้วยนะครับ เก็บไปก็ไร้ค่า Deactivate Plugins All in one SEO Pack ต่อไปรอ UAT 555 ผ่านไปสักระยะหนึ่งก่อน ผมกะเวลาไว้ประมาณ 1 Week มาเทสที่ Local…

[DB] มาดูพวก Operator JOIN ทั้งหลายใน Execution Plan ดีกว่า

IBM DB2

หลังจากมี Blog เกี่ยวกับ Execution Plan ไป 2 ตอนแล้ว [DB2] ลองใช้ Execution Plan เพื่อดูว่า Query ที่เขียนนั้นแย่ หรือไม่ [DB2] แค่เปลี่ยน Query ชีวิตก็ดีขึ้นแล้ว JOIN vs Sub Query ถ้าลองสังเกตุดีๆ ตอนที่มันสร้าง Flow ขึ้นมา มันมีกล่องแทนการกระทำต่างๆ เช่น FETCH, TBSCAN เป็นต้น ซึ่งถ้าลองย้อนกลับไปในตอนเรียนวิชา Database มันมีหัวข้อนึง ชื่อ Query Optimization ทำอย่างไรให้ Relational Algebra (Low Level จาก SQL ครับ จริงๆตัว SQL ที่ใช้เบื้องหลังมันก็ไปแปลงกลับเป็น Relational Algebra)  หรือพูดง่ายๆ คือ Query ดึงข้อมูลได้มีประสิทธิภาพครับ โดยคราวนี้เราสนใจเฉพาะกลุ่ม Join ครับ นอกจาก INNER JOIN, RIGHT JOIN และ LEFT JOIN มันมีอะไรที่ลึกล้ำกว่านี้อีกเหรอ คำตอบ คือ มีครับ มองว่าเป็น Algorithm ที่เอามาจัดการกับข้อมูลที่ต้องการครับ โดยผมขอ Focus ที่ตัว DB2 ก่อนนะว่า มีอะไรบ้าง เอาเฉพาะที่โผล่มาใน Execution Plan บ่อยๆนะครับ NLJOIN (Nest Loop Join) Nest Loop Join เอาข้อมูล 2 แหล่งมาไล่จับคู่กันตรงๆ จับไปเรื่อยๆจนกว่าจะครบทั้ง 2 ฝั่ง นึกถึงภาพของ Buble Sort ยังไงไม่รู้ เหมาะกับการจัดการกับข้อมูลน้อยๆ ต้องศึกษาลึกๆ…

[DB2] แค่เปลี่ยน Query ชีวิตก็ดีขึ้นแล้ว JOIN vs Sub Query

IBM DB2

วันนี้พอดีมาประจำการที่ Site และได้ดูเคสบ่นๆจาก User ว่าทำไมหน้า Exchange Rate มันช้าจังเลย เปิดทีรอ 2-3 นาทีได้ ตอนแรกเราก็เฉยๆอยู่ เพราะงานหลักของเรา คือ BOT DMS (DataSet กับ DataFile 2 พี่น้อง) แต่พอสักสายๆ เข้า BA บอกว่าเปิดไม่ได้เลย เค้าลอง Interface feed ข้อมูล ย้อนหลัง 10 ปี เข้าไป น่าจะประมาน 100,000 Record ได้ หลังจากผมเข้าไปดูที่เครื่อง BA สิ่งที่ผมเข้าใจได้ คือ Query มัน Timeout ครับ รีบไปเปิด Code ทันทีเลยครับ มาดู Query กัน จาก Query ข้างต้นนะครับ เท่าที่ดูมาใช้ LEFT JOIN ปกตินะ แต่มีอยู่ก้อนนึง ที่มีความพิเศษเป็นการ Join ที่เกิดจากการ SELECT และก้อนที่มีการ SELECT มา JOIN เนี่ย มีใช้ Sub Query ต่ออีก โดยผมขอตัดมาให้ดูนะครับ ถ้ามองที่ Query แล้ว โอ้วมีการใช้ Sub Query ที่มีการ Join กับ Query หลักด้วย (AND MEX.COMMODITYID = ME2.COMMODITYID  AND MEX.QUOTEDID = ME2.QUOTEDID) คิดดูเล่นๆ ข้อมูล 100,000 Record มาก็เอามา Cross กับอีก 100,000 Record…

งานในสาย IT Analyst มีอะไรบ้าง

วันเสาร์ที่ผ่านมา ผมไปฟังงานสัมมนาของ อ.ปิ่น “Hello World Becoming Professional Software Analyst” ผมขอสรุปเรียบเรียงไว้จากมุมมองที่ผมเข้าใจนะครับ โดยทุก Analyst ต้องมีสิ่งที่เหมือนกัน เช่น การพูดคุย การนำเสนอ ทัศนคติที่ดี มีความเข้าใจใน Technology Trend ทักษะในการประเมินเวลา ในมุมที่ตัวเองรับผิดชอบ การคิดอย่างเป็นระบบ การทำ Root-Cause Analysis จากภาพรวมเจาะลงไปนะครับ Overall-Mangement Project Analyst บริหารจัดการ Project ในบางหน่วยงาน Project Analyst กับ Project Managment (PM) คือ คนคนเดียวกัน สร้าง Value (มูลค่า) ให้กับองค์กรให้ได้มากที่สุด โดยต้องรักษาความสมดุลของ Resource Requirement Quality Time Support Analyst หลายคนงง ว่าทำไมผมจัดกลุ่มเดียวกับ Project Analyst  เพราะ Support Analyst เหมือนกับ Project Analyst ดูภาพรวมของงานทั้งหมด หลังจาก Golive นั้นเอง ต้องจัดการ Value (มูลค่า) ให้กับองค์กร อาจจะไม่ใช้เงินกำไร แต่เป็นการลดความสูญเสียจากปัญหาที่เกิดระหว่างใช้งาน การแก้ปัญหาที่รวดเร็ว หรือหาทีมงานที่เกี่ยวข้องเข้าไปแก้ปัญหาได้ Business Business Analyst สนใจสิ่งที่เรียกว่า โจทย์ทางธุรกิจ ถ้าในภาษาคน IT ก็คือ Requirement เป็นตัวแทน ที่ดึงความต้องการ (Requirement) มาจาก User และปรับเปลี่ยน Workflow ให้เหมาะสม เริ่มจากการชักถามอาการ(Symton) แล้วมาหา Root-Cause ที่ตรงจุด และมาเสนอ Solution ในการแก้ปัญหา โดยอาจจะเป็น Application ใหม่, ใช้ Product เดิมที่มีอยู่ หรือ…

Minor OTA Update for Lenovo P90

หลังจากที่ Blog ตอนก่อนที่ผมได้ Review Lenovo P90 ไม่เมื่อปีก่อนโน้น ผมได้มีการ Update (2016-02-01) แจ้งไปว่า Lenovo ได้ลอยแพไปแล้วครับ มาในวันที่ 2016-06-09 เวลาประมาณตอนตี 5 ผมได้รับแจ้งว่ามี OTA Update มาครับ (P90_S149_160504_ROW) ไหนๆ ก็ไม่มีอะไรจะเสียอยู่แล้ว เลยลองกดดูครับ โดยที่ผมเข้าใจ เป็นการ Patch ในส่วนของ Security นะครับ ผมขอทดสอบสัก 3 วันก่อน ว่ามีอะไรดีขึ้นบ้างหลังจากได้ลองใช้ ROM นี้นะครับ   หลังจาก Update เสร็จยังเป็น Android 4.4 Kitkat อยู่นะครับ UI เหมือนเดิมครับ ลื่นขึ้น เสถียรขึ้นครับ ปัญหาที่ชอบงอแง ชอบ Restart ตัวเองไม่ค่อยมี ปกติจะเจอวันละครั้งในช่วง 2-3 เดือนที่ผ่านมาครับ แบตอืดขึ้นครับ ถ้าใครยังเจอปัญหาแบตหมดไวอยู่ แนะนำลองใช้ App Battery Saver (Boost & Clean) ของ McAfee (Intel Security)  เจ้าของ CPU ATOM ครับ ความเห็นส่วนตัว ถ้ามือถือเครื่องหน้า ผมไม่แนะนำให้ซื้อ CPU ของค่าย Intel สักเท่าไหร่ เพราะ ประสิทธิภาพยังสู้กับค่ายอื่นๆยังไม่ได้ครับ ยังไม่มี Custom Rom สักที T____T  

[CR] บะหมี่เกี้ยว อาคารชินพงษ์ ถนนลาดหญ้า

วันนี้หลังจากไม่ได้กินบะหมี่เกี้ยวร้านลุงมานานมากก วันนี้ได้กลับมากินแล้ว ผมเลยอยากจะมาแนะนำกับครับ ร้านบะหมี่เกี้ยวร้านนี้ อยู่ตรง ถนนลาดหญ้า ซอยลาดหญ้า 9  อาคารชินพงษ์ครับ สำหรับราคาถูกมากครับ ในยุคสมัยที่ข้าวแกงใน กทม เฉลี่ยจานะ 45 บาท โดยราคาของบะหมี่เกี้ยวเจ้านี้ ธรรมดา 25 บาท พิเศษ 30 บาท  

Best Practices คำแนะนำที่เรียบง่าย แต่มีที่มาที่ล้ำลึก

Best Practices คำแนะนำที่เรียบง่าย แต่มีที่มาที่ล้ำลึก โดยเวลาที่เราเขียนโปรแกรม เราอาจจะโดนจำกัดการใช้ตัวแปร ให้เขียน Code ตามรูปแบบที่ SA กำหนดไว้ ต้องเขียน Code เป็นชั้นๆ อาทิ เช่น Presenter, Business Logic, Data Access และแต่ละชั้นต้องเชื่อมกันผ่าน Interface แต่ถ้าลองมาศึกษาลึกๆแล้ว ทุกอย่างมีที่มาที่ไป แต่ถ้าจะลงลึกไป อธิบายผลดี/ผลเสียมันอาจจะต้องใช้เวลา มันก็เลยกลายเป็น Best Practices เรียบง่ายที่ ห่อหุ้ม(Encapsulate) ความซับซ้อนต่างๆเอาไว้ข้างในครับ ตัว Developer เองจะได้เวลาไปสนใจเรื่องอื่นมากขึ้น เช่น Business หรือ การ Test ครับ 😀