[JAVA] Thread Pool ใน Java

ช่วงนี้งานเยอะครับ ผมได้รับมอบหมายงานให้ลองปรับระบบงานเดิม ให้มันรองรับงานได้มากขึ้น และหนึ่งในเทคนิคที่ผมเลือกใช้ การทำงานแบบ Asynchronous ครับ โดยการทำงานแบบนี้สิ่งคนสั่ง สั่งงานเสร็จปุ๊บ ไม่ต้องรอผลลัพธ์ครับ แล้วให้ระบบมันทำงานต่อไปจนเสร็จ และแจ้งค่อยแจ้งผลลัพธ์ให้ Client รับทราบครับ แล้ว ThreadPool มันเกี่ยวยังไงหละ เจ้า ThreadPool มันเป็นวิธีการนึงที่ช่วยในการจัดการกับ Resource ครับ ถ้าเป็นเมื่อก่อนเวลาเราจะแตกงานให้ใช้ CPU ของเครื่องให้มันคุ้มค่าสิ่งที่ทำกัน คือ การ New Thread แยกเลยครับ ตาม Code ตัวอย่างครับ ปล. Code นี้มีปัญหานะครับ Run ไปเรื่อยๆ จาก Code ในข้างต้น ถ้ามีงานสัก 100 ชิ้น และต้องการแตก Thread จะพบปัญหาของการไปเขียน Thread แยกเอง ถ้าไม่เชี่ยว หรือเชี่ยวแล้วอย่าทำครับ เพราะ ทำอะไรไว้ ต้องไปจัดการให้เรียบร้อยด้วยนะครับ เพราะ เราต้องการคุมเกม แต่ถ้าเกิด Exception ขึ้นมาแล้ว เราต้องจัดการกับ Thread ที่มีปัญหาเองนะครับ ไม่งั้นมันจะแอบกิน Resource ของระบบไปเรื่อยๆจน System Down ลงไปครับ หรือ  ถ้าเราต้องการควบคุมว่ามีแต่ 5 Thread เท่าที่นั้นสามารถทำงานได้พร้อมกัน โอ้ววต้องไปเขียน Semaphore กันวุ่นวายเลย พระเอกของเราครับ แนวคิดของ ThreadPool จึงเกิดขึ้นมาครับ เพื่อมาเป็นตัวช่วยในการจัดการงานทั้งหมดให้งาน หรือใช้ Resouce ได้คุ้มค่า เพราะในแนวคิดของการ Caching Thread ทำงานเดียวกัน แต่ทำไมเยอะแยะสร้างตามที่มันสามารถทำงานได้พร้อมกัน และเมื่อมันทำงานเสร็จ โดย Thread ที่ทำงานเสร็จแล้วก็จะกลับไปเป็นสถานะ Idle และรอการ Reuse หรือถูกทำลายไปครับ สำหรับใน Java มีตัว…

[JWT] Idea การออกแบบ Token สำหรับ Microservice

พอดีลองมาเยอะครับ เลยขอสรุป Pattern ที่ใช้ครับ Blog นี้อาจจะสั้นนิดนึงนะ โดยผมแยก Token ออกเป็น 2 กลุ่ม ได้แก่ Access Token กับ Refresh Token โดยแต่ละอันมีรายละเอียด ดังนี้ Access Token ระยะเวลาสั้น เก็บ Anything เช่น พวกสิทธิในระบบ Size ยิ่งใหญ่ทำให้ Request นานๆ ข้อมูลบางอย่าง เช่น พวกสิทธิ อาจจะต้องแปลงให้เล็กที่สุด โดยอาจจะทำเป็นเลขฐาน 2 แทน ถ้า Expired Return Code 4xx แต่ไม่ได้อยู่ในมาตรฐานนะ แล้วแต่องค์กรจะตกลงกัน Refresh Token ระยะเวลายาว – เก็บว่า User ยังอยู่ในระบบนะ เอาไปขอ Access Token ถ้า Logout ไป Server ต้องเก็บ Token Id ว่ามัน Expired ไปแล้ว มันไม่สามารถมาขอ Token อื่นๆได้ Pettern ของ Return Code 401 403  

[JAVA] ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file

ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file โดยสามารถใช้ Code ได้ ดังนี้ครับ เพิ่ม Library Apache Commons IO  ลงในไฟล์ pom.xml  ครับ จากนั้นเรียกใช้ Class FilenameUtils  ที่อยู่ใน Library Apache Commons IO ตัวอย่าง Code ที่ใช้ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file ครับ String extension = FilenameUtils.getExtension(file.getOriginalFilename());  

[DB] DBeaver – เครื่องมือที่ช่วยให้การจัดการ Database เป็นเรื่องง่ายๆ

หลังจากเข้าไปดูปัญหาของหลายๆทีม พบว่า Tools ตัวเก่าอย่าง WinSQL มันเก่ามาก น่าจะ 15 ปี และ ถึงว่าเป็น Software ที่ใช้คุ้มค่าเกินราคาจริงๆครับ แต่ต้องซูฮกคนออกแบบด้วยทั้งตัว Protocal – ODBC และภาษา SQL จึงทำให้ Tools ตัวนี้ตายยากมากๆครับ แม้ว่าจะมีปัญหาจุกจิมากครับ ทั้งปัญหาการเอาผลลัพธ์ที่ได้จาการ Query ไปใช้ต่อ หรือการที่ User ต้องเชี่ยวมากจำ Column ได้แม่นครับ แต่หลังจากนี้ปัญหาจะหมดไปด้วยเจ้า DBeaver ครับ โดยเวอร์ชัน Community Edition ผมได้ลองใช้ และแนะนำในองค์กรครับ มันเพียงพอกับการใช้งานทั่วไป เช่น หัวข้อใน Blog นี้ เริ่มติดตั้งกันเลย มาลองเชื่อมต่อ DB2 มาลองใช้ DB ของ Microsoft บ้าง

[BPMN] มา Test BPMN ที่สร้างจาก Camunda กันครับ

หลังจากยุ่งกับงานประจำนานเลย ตอนนี้เริ่มกลับมาทำงาน Thesis แล้วครับ ถ้าใครสร้าง BPMN ด้วย Camunda ไปแล้วนั่น หาจะทดสอบมีได้หลายวิธีครับ เช่น แต่ถ้ามาดูที่ตัว Camunda มีตัวช่วยสำหรับ Test เหมือนกันครับ โดยมีตัวช่วย ดังนี้ สร้าง BPMN ก่อนครับ มาลุย Code กันดีกว่าครับ สำหรับ Tools ที่ผมใช้ IntelliJ กับ Camunda Test Project Template ครับ เมื่อ Generate Project มาแล้วจะพบตัว InmemoryH2Test กับ process.bpmn ไม่ต้องสนใจครับ เราสร้างใหม่อยู่แล้ว เมื่อได้ Unit Test เปล่าๆขึ้นมาแล้วให้ใส่คำสั่งลงไปใน Class simpleLoanTest  ครับ สร้าง Test initial @Before เพื่อบอกว่าก่อน Test ต้องมีการดึง BPMN Engine ออกมา เพื่อใช้งานก่อนครับ จากนั้นลุยสร้าง Test ตามเส้นทางที่กำหนดเลยครับ โดย @Test  เพื่อบอกว่าเป็น Test Case ครับ และ @Deployment  สำหรับบอกว่าเราจะทดสอบ BPM์N อันไหนครับ ในที่นี้เป็นไฟล์ simpleLoan.bpmn  ครับ ทดสอบ Run Unit Test ดูครับ หมายเหตุ : ผมยังเล่นกับแต่ User Task นะครับ แต่ส่วนอื่นๆ ยังไม่ได้ทดสอบนะครับ ERROR ที่พบ ถ้าพบ Error ENGINE-16004 Exception while closing command context: Can’t find scripting engine…

สรุปงาน .NET Conf 2018! BKK

วันนี้ผมมาแบบงง จริงๆมาเปลี่ยนที่ทำ Thesis และก็ฟังหัวข้อที่สนใจครับ ผมเลยอาจจะเก็บรายละเอียดมาไม่ครบนะครับ โดยสำหรับสถานที่จัดงานอยู่ที่ Launchpad ในถนนปั้น หรือ ซอยปั้น ห่างจาก BTS สุรศักดิ์ ไม่เกิน 500 เมตรครับ 09:30-10:20| What’s coming to C# Speaker: Will Fuqua A look in the future: Nullable reference types, recursive patterns, asynchronous streams and more. C# / TypeScript จากแนวโน้มของ stackoverflow insight 2017 ยังเป็นที่นิยมครับ dotnet strategy 2017 (WIN – WIN ครับ) โดยจะเป็นการ C# 7.x Feature C# 8.0 Feature สำหรับผมนะครับตัว Default Interface ไม่จำเป็นอย่าใช้ เพราะ มันมีโอกาศเกิด diamond inheritance problem ได้ครับ 10:40-11:30| Build Great Libraries using .NET Standard Speaker: Aaron Amm Theeranit 11:30-12:20| Code at scale Speaker: Joel Dickson Agoda ใช้ Flow ตาม Git เลยครับ แต่ Branch จากนั้นทำเสร็จ Pull Request Good Code…

[MS WORD] มาใส่เลขอ้างอิงให้กับสมการดีกว่า

บ่อยครั้งที่เราต้องทำเอกสาร มีพวกสูตรมากมายเต็มไปหมด แต่ต้องมาไล่ลำดับเหรอเหรอ จริงๆ MS Word มีตัวช่วยอยู่แล้วครับ สามารถเข้าไปดูวิธีการทำได้เลยครับ โดยมีขั้นตอน ดังนี้ครับ ขั้นตอน ขั้นตอนสามารถทำได้ตามรูปเลยครับ ถ้างงมีคำอธิบายด้านล่างครับ ผลลัพธ์ที่ได้ครับ

[SPRING] สร้าง Form Upload ไฟล์ และบันทึกข้อมูลครับ

หลังจากโดนมรสุมงานหนักมาตั้งแต่ต้นปีครับ กว่าจะได้กลับบ้านที่ก็ปาไป 3 ทุ่มกว่าๆ ถึง 4 ทุ่มและ เริ่มกลับมาทำ Thesis สักทีครับ สำหรับโจทย์ที่ผมเอามาเขียน Blog ครั้งนี้เป็นการ Upload File จากนั้น Save ที่ไฟล์ที่ Server ครับ พร้อมกับบันทึกข้อมูลที่ป้อนเข้ามาจาก User ครับ เตรียมตัว Just Coding ครับ สังเกตุดีๆ ผมมี Property ที่เกี่ยวกับ Multipart ชื่อ BPMNFile ครับ โดย Property นี้ ผมกำหนดเป็น @Transient  ครับ ซึ่งเป็นตัวที่บอก Hibernate ว่าไม่ต้องสร้าง Column นี้ลงที่ฐานข้อมูลครับ หน้าตาของระบบ (ผมไม่มีหัวการออกแบบเลยครับ 555) ปัญหาที่พบหละ ?  

Ingress Anomaly Bangkok 2018

หลังจากย้ายเกมส์ที่เล่นบนรถเมล์จาก Pokemon GO มาเป็น Ingress ซึ่งเป็นเกมส์แนว Location Based ครับ โดยเราจะได้รับบทเป็น Agent เป็นสายลับนั้นเองครับ สำหรับที่สนใจเกมส์สามารถไปอ่านต่่อได้ครับ เอ้าเรากลับมากันที่ Anormaly Bangkok โดยงาน Anormaly เป็น Event ที่ทางทีมผู้พัฒนาจัดให้ผู้เล่นเข้ามาทำกิจกรรมร่วมกันครับ โดยในปีนี้จัดในวันที่ 20-21 ตุลาคม 2561 ครับ โดยจะมีงาน 2 ส่วน งาน Recursion Prime งานนีัจะเล่นทำตามท้องเรื่องเลยครับ ที่ Agent ทั้ง 2 ฝ่ายต้องเข้ามาแย่งชิง แข่งขัน ตามกติกาที่ NIA กำหนดไว้ครับ โดยพื้นที่ในการแข่งขันถือว่ากว่ามากครับ เท่าที่ถามทาง POC มา เพราะปกติแต่ 1 ตารางกิโลเมตรครับ แต่ปีนี้พื้นที่ใหญ่ขึ้นนะครับ – ผมเข้าใจว่าเป็นพื้นที่เกาะรัตนโกสินทร์นะครับ โดยพื้นที่ที่ใช้แข่งเรียกว่า PlayBox ครับ สำหรับการแข่งขันมีการแข่ง 4 แบบ ในช่วงเวลาที่กำหนดครับ อันนี้ผมสรุปตามที่เข้าใจนะครับ งานนี้เวลาที่แข่งช่วง 11:00 – 14:00 ครับ ความซับซ้อนของการแข่งขัน คือ ในแต่ละช่วงเวลามีการแข่งขันมากกว่า 1 แบบครับ ขนานกันไปครับ ทำให้ฝ่ายวางแผนต้องคิดหนักเลย ส่วนเราเป็นหน่วยปฏิบัติการครับ ทำตามหน้าที่ก็พอครับ สำหรับผมเนื่องจากมาใหม่ เลยได้ดูแลพื้นที่ในส่วนของศาลาว่าการกรุงเทพฯครับ ซึ่งมีจำนวน 5 Portal ครับ พื้นที่รวมพล วางแผน และเติมพลังครับ ถึงจุด Registration แล้วครับ ^_^ จากที่บอกไปว่าการแข่งขันมันแค่ 3 ชั่วโมงครับ แต่จริงๆสงครามมันเริ่มต้นตั้งแต่ 7 โมงแล้วครับ ที่ทางฝ่าย Resistance เริ่มโจมตีเข้ามาครับ ส่วนเราทำยังไงก็ได้ให้เสาเป็นของฝ่าย Enlightment ก็พอครับ ความเข้มข้นอยู่ในช่วง…

[C#] DTO/Mapper Class Example

C# Logo

DTO คือ อะไร? DTO คือ Data Transfer Object พูดง่าย ๆ ก็คือเป็น object ที่ใช้ในการส่ง data กันในระบบครับ นอกจากนี้แล้ว การใช้ DTO ยังเป็นการ Limit ข้อมูล หรือมองว่าเป็นการกำหนด Pattern ให้กับ Request / Response กับระบบ และยังป้องกัน Over-posting Attack (คนร้ายเดา Field ได้ถูก แล้วลองส่ง Request เข้ามา) ถ้าไม่มี DTO ดักไว้ จะมีข้อมูลเกินเข้าไปมาได้ครับ จากตัวอย่าง CustomerDTO ของเราจะมี 6 Field แต่ตัว CreateCustomerDTO เรา Limit ไว้ 3 Field ถ้าแบบเดิมตอน Create เราไม่มี DTO มากัน Attacker สามารถเดา Field และส่งมาได้ครับ Mapper Class Example สำหรับผม Pattern ที่ใช้ DTO และในชั้น Repository ทำตัว Mapper Class ระหว่าง DTO กับ Model (Model Class ที่เป็นตัวแทนของ Table ใน Database ครับ ตัวอย่าง Class ที่ Map ระหว่าง DTO และ Data Mapper ใน pattern of enterprise application architecture…