[SPRING] ใช้ VSCode ในการเขียน Spring Boot กัน

มาลองใช้งาน Spring Boot โดยใช้ VSCode กันครับ สำหรับ Blog นี้ เนื่องจากหลายๆงานในปัจจุบันหันมาใช้ VSCode กันติดแล้ว เพราะมันเร็ว ง่าย และไม่ซับซ้อนครับ โดยวันนี้ผมลองมาฟื้นฟูทักษะ Java ด้วย หายไปกับ .Net Framework กับ Power Shell หลายปีครับ สิ่งที่ต้องเตรียม ติดตั้ง JDK (Java Development Kit) SET JAVA_HOME ครับ ติดตั้ง VSCode ลุยกันเลย มาที่ VSCode เปิดมาแล้ว ให้ทำการติดตั้ง Java Extension Pack สำหรับ Extension นี้พัฒนาโดย Microsoft ครับ ซึ่ง Extension นี้ช่วยสำหรับ Java Code HintIntegrated Terminal Debugger Test Runner MAVEN Project ลองสร้าง Project เริ่มต้นจากเว็บ Spring Initializr กันก่อนครับ ตัว Tools ตัวช่วยสร้างโครงสร้าง Project ให้เหมาะกับ MAVEN หรือ Grail ผมเลือก MAVEN ไปครับ ภาษาที่ใช้ ผมใช้ Java เลือกเวอร์ชันของ Sping Boot กำหนด Dependency ที่จำเป็น พิมพ์ได้เลยครับ ในที่นี้ผมเลือก Web / JPA (พวกจัดการ DB) ครับ กำหนดชื่อ Package ครับ ** ถ้ายังเห็นว่า Config…

[DOCKER] สร้าง DockerFile ที่มี User ที่จำเป็นสำหรับ DB2 ครับ

สวัสดีครับ Blog ตอนนี้น่าจะเป็น Blog ที่เกี่ยวกับ Docker อันแรกมั้งๆ ปกติผมจะใช้ Virtual Machine ในการทำงานมากกว่าครับ โดยสำหรับผมได้เอา Docker Image ของ DB2 มาใช้งานครับ โดยจะเป็น Version 11 Fixed Pack 3 ซึ่งเมื่อผม pull ลงมาแล้ว ปรากฏว่าลองอ่าน Document แล้ว ตัว Docker Image มันมีแต่ user db2inst1 เป็นหลักครับ แต่ Database ที่ผมต้องการจะเอามาขึ้นในส่วนของ Application มันต้องการใช้ มี username bonanza password bonanza username invest password invest การแก้ไขมันมี 2 วิธีนะ แบบที่ 1 : หลังจาก docker run ไปแล้ว เข้า terminal ของ container ด้วยคำสั่ง docker exec -it <CONTAINER_ID> bash  เช่น docker exec -it 4484a421c205 bash  ครับ แล้วเขียนคำสั่งเพิ่ม user กำหนด password ครับ วิธีนี้มีข้อเสีย คือ ถ้าต้องการสร้าง Container ใหม่ก็ต้องเข้าไปไล่ Run Script ให้ แบบที่ 2 : ทำ dockerfile ดีกว่า โดยผมทำ image file แยกออกมาอีกอันเลย เอาไว้ใช้งานในองค์กรครับ เอาไปฝากไว้ใน…

[BPMN] แก้ปัญหา Stack Size is too large บน Camunda BPMN

หลังจากลองตัว Camunda  BPMN Engine มาสักพัก แล้วจะทดสอบอะไร อยากรู้ว่ามันมีค่าเท่าไหร่ ปกติเราทำพวก Instrument Test เพื่อแสดงให้เห็นว่ากิจกรรมที่สนใจ โดยผมเขียนคำสั่งประมาณนี้ out:println “=========================================” out:println “execution id ” + execution.getProcessInstanceId(); out:println “loanAmt =” + execution.getVariable(“loanAmt”); out:println “=========================================” เมื่อนำไป Run กับ BPMN Engine พบว่า Stack Size is too large ครับ ปัญหา คือ อะไร Operation ในการทำงานมันเยอะเกินไปครับ แทนที่จะให้มันต่อ String ในคำสั่ง ก็แก้ไขให้มันเตรียมข้อมูลอะไรให้เสร็จก่อนครับ การแก้ไข แยกส่วนของเตรียมข้อมูลออกจากการแสดงผลครับ โดย Code ใน Scritp Task ที่ได้ เป็นดังนี้ def line1 = “execution id ” + execution.getProcessInstanceId(); def line2 = “loanAmt =” + execution.getVariable(“loanAmt”); out:println “=========================================” out:println line1; out:println line2; out:println “=========================================” ทดสอบอีกครั้งครับ ได้ผลลัพธ์สวยงามครับ ^___^

[JAVA] TOMCAT Change Default Port

Reference: http://maxpixel.freegreatpicture.com/Tomcat-Charming-Kitten-Animals-Cat-Fur-Animal-1199937

พอดีวันนี้ได้เข้ามาดู Jenkins ทำไมมัน Start ไม่ติดครับ โดยไปพบว่า Port ที่ Tomcat มันใช้ดันไปมี Application อื่นใช้แล้วครับ ทางแก้ที่เหลือ คือ การเปลี่ยน Port TOMCAT หนีเอาครับ โดยจะแก้ไขจาก Port 8080 ไปเป็๋น 8888 (เอาฤกษ์เอาชัยกันก่อนครับ) โดยสำหรับการเปลี่ยน Port ของ TOMCAT มีขั้นตอน ดังนี้ครับ ไปที่ TOMCAT_HOME  (Path ที่ติดตั้ง TOMCAT แหละครับ) เข้าไปที่โพลเดอร์ conf พบกับไฟล์มากมายครับสนใจไฟล์ server.xml  ครับ เปิดมันด้วย Text Editor สักตัวครับ อย่างผมใช้ตัว VSCODE ครับ หาส่วน Connector port=”8888″  ครับ จากนั้นทำการแก้ไข Port ครับ จากนั้น Restart TOMCAT ใหม่ครับ ^__^

[CR] ปีกไก่ทอดนาโกย่าสไตล์ที่ร้านเซไค โนะ ยามะจัง (Sekai no Yamachan)

ตอนแรกวันนี้ผมก็จะไปหาที่นั่งทำ Thesis เงียบแหละ หลังจากไปลองที่ Co-working Space แถวประตูน้ำมาแล้ว นั่งทำแต่เช้าจนจะบ่าย 3 แล้ว ลองไปกินกระเพราเป็ดย่างที่ Emporium ดีกว่าครับ แต่ไปๆมาแล้ว เอออเจอร้านที่ GZR Gozziira – กินข้าวแกงกะหรี่จานยักษ์!! Review ครับ เห้ยยยอยากกินหวะ ก็เลยเดินไปดูแต่ปรากฏว่าเข้าซอยผิด 5555  เดินเข้ามาซอยสุขุมวิท 39 แทน ไหนๆก็พลากมาแล้ว ลองเดินมาเจอคุณลุง หิวหวะ ลองเข้าไปกินดีกว่า ไปกินแบบไม่รู่ว่าร้านนี่ขายอะไร จริงๆตอนแรกคิดว่าร้านนี้จุดเด่นอยู่ที่ราเมงนะ เพราะมีป้ายหลอกให้หลงอีกที เข้ามาร้านแล้ว กูเป็นลูกค้าคนไทยคนเดียวในร้าน แถมพนักงานรัวภาษาญี่ปุ่นใส่อีก ผมเลยตอบไปว่ามา 1 ท่านครับ ^___^ หลังจากไม่รู้อะไรตอนสั่งเลยถามทางร้าน พนักงานแนะนำ ปีกไก่ทอดนาโกย่า มันมี 2 แบบ แบบปกติ เค็ม/เผ็ด อีกแบบ คือ ไก่ดำ อันนี้พนักงานบอกว่าออกไปทางเปรี้ยวๆนะ ยากิโซะบะ – อันนี้พนักงานแนะว่ามันอยู่ท้องครบเครื่อ่ง ซึ่งผมยอมรับว่าพลาด 55555 สิ่งที่ผมลองสั่งมา ปีกไก่ทอดนาโกย่า(Tebasaki) แบบปกติ มี 5 ชิ้นครับ ราคา 130 บาท ไก่อร่อยจริงๆครับ หนังกรุบกรอบ รสชาติออกไปทางเผ็ด/เค็ม อันนี้ผมเดวๆ มันน่าจะใช้ซอสพริกไทยดำ กับน้ำมันหอย (อันนี้เคยลองทำไก่ทอดแล้วได้สูตรที่มันคล้ายๆนะ แต่บังไม่ลงตัวแบบนี้) เนื้อนุ่ม ฉ้ำๆครับ นุ่มจนเลาะเนื้อออกมาจากกระดูกได้ง่าย คิชิเมงร้าน และโมจิ (Chikara Kishimen) ราคา 180 บาท มีน้ำซุปกับเส้น อร่อยดีครับ แต่น่าจะเชื่อพนักงานลองสั่งยากิโซบะครับ ได้กินโมจิครั้งแรก – เออเข้าใจเลยว่าทำไมมันมีข่าวแนวๆว่าโมจิติดคอตายได้ มันเหนียวนุ่มครับ มาดูที่ค่าเสียหายกันบ้างดีกว่าครับ ตามรูปเลยครับ รสชาติใช้ได้เยี่ยมเลยครับ แต่เรื่องราคามันต้องคิด Service Charger 10% VAT 7%…

[DB2] Run Script แบบ Check ก่อน ถ้าผ่านไปต่อ

IBM DB2

จริงๆ Blog นี้เกิดจากการได้เป็นผู้โชคดีไปช่วยน้องในทีม Run Script สำหรับ UAT ครับ โดยที่น้องคนนั้นก็ไม่ค่อยมั่นใจกับ Script ครับ เมื่อทดสอบที่ Site ลูกค้าจริงแล้วพบว่า อ้าวเฮ้ยยยย ไม่เหมือนที่คุยกันไว้นี่นาที่บอกว่า Migrate ครบ แต่อ้าวข้อมูลหายไปอ้าวเฮ้ย อย่ากลืนน้ำลายตัวเองดีกว่าเสียเวลาร้องขออะไรสุดท้ายข้อมูลก็ต้องกลับคืน (มันของลูกค้า ไม่ได้ข้อมูลครบคงหัวขาด) ทำไมถึงเป็นเช่นนั้นหละ ทำไม Script ที่มีการซักซ้อมมาอย่างดีถึงเกิดปัญหาตอนใช้จริง มาดูโครงสร้าง Script กันดีกว่าครับ โดยได้ทำเป็น Batch File ชุดนึงครับ (ไฟล์ migrate.bat ) ข้างในมีเนื้อหาประมาณนี้ครับ แต่พอลองทดสอบทำงานจริง อ้าวววววววว Schema ไม่ตรงกัน พบ Script แรกมัน Error แต่ที่มันจะต้องหยุดกลับต้องทำงานต่อไป DROP ข้อมูลทิ้งเลย ซุนวูกล่าวไว้ว่า รู้เขารู้เรา รบร้อยครั้งชนะร้อยครัั้ง แต่นี่รู้ไม่ครบ แล้วต้องทำอย่างไร กลศึกมีไว้พลิกแพลงครับ เราก็เล่นแบบ Safe สิ Execute Script ดู Error ถ้าไม่มีแล้วทำงานต่อ ดู Return Code ครับ ค่าที่ db2 return กลับมา มีค่าที่เป็นไปได้ครับ มีดังนี้ CODE DESCRIPTION 0 DB2® command or SQL statement executed successfully 1 SELECT or FETCH statement returned no rows 2 DB2 command or SQL statement warning 4 DB2 command or…

[MSWORD] เพิ่ม Cross-Reference เอาไว้อ้างอิงรูปภาพ หรือตารางในตารางครับ

หลายครั้งเรากำลังเขียนรายงานอยู่ แล้วมีข้อมูล Pattern แบบนี้ หลังจาก Insert Caption เพื่อใส่คำว่าภาพที่ 6(ที่ถูก Highlight สีเหลือง) แล้วตรงคำว่า ดังภาพที่ 6(กรอบสีแดง) ต้องพิมพ์เอง หรือป่าว คำตอบไม่ต้องพิมพ์เองครับ ใน Microsoft Word มี Feature นี้อยู่แล้วครับ ชื่อว่า Cross-Reference ครับ โดยมีขั้นตอน ดังนี้ Insert Caption ให้เรียบร้อยก่อนครับ Click บริเวณที่ต้องการใส่ Cross Referece ครับ จากนั้นมาที่ Ribbon > Reference > Cross Reference ตามขั้นตอนครับ **ในกรณีที่มีการย้าย หรือแก้ไขสำดับสามารถ Click ขาว เลือก Update Field ได้เลยครับ

[TESTING] มาทำให้ JSON-Server Support Request แบบ Chunked ครับ

หลังจากติดปัญหาเรื่อง BPMN Engine  แล้วพบว่า Service Task ถ้าทำเป็น Web Service แล้วข้อมูล Request ในส่วนของ Body มันหายไปครับ หลังจากไล่ไปไล่มา โดยดูจาก Forum ของ Camunda Payload is empty when making HTTP POST request with HttpConnector How to specify POST payload for Rest Tasks ? Disable sending the Chunked request from camunda ตัว Code มาไล่แกะไปจาก Stack Trace หรือลอง Debug Request ที่ส่งเข้าไปใน JSON-SERVER ครับ ในที่สุดก็พบปัญหาแล้วครับ เนื่องจากตัว BPMN Engine ที่ผมเลือกได้ใช้ Tomcat HTTP 1.1 connector ซึ่งมีการเปิด transfer encoding ให้เป็น Mode = “Chunked” ซึ่งมีการส่งข้อมูลเป็นชิ้นๆครับ และที่สำคัญ ถ้าทำ Request แบบนี้มันจะไม่ระบุขนาดของ Request ไปด้วยครับ ซึ่งนี่แหละที่ทำให้ JSON-Server มันมอง Request-Body ว่าไม่ได้ส่งอะไรมาครับ งงอยู่ตั้ง 2 สัปดาห์ครับ ถ้าจะไปแก้เป็นตัว HTTP 1.0 มันก็ไม่ควรครับ เพราะจะทำให้ตัว Camunda BPMN Engine ทำงานผิดปรกตืในส่วนอื่นได้ครับ หลังจากค้นๆดูแล้ว ตัว JSON-Server มันยอมให้เราทำ Middleware…

[TESTING] มา Debug Request ที่ส่งเข้าไปใน JSON-SERVER ครับ

หลังจากที่ได้ลง JSON-Server ไปแล้วใน Blog ตอนก่อนครับ หลังจากที่ลอง Service Task บน BPMN แล้วพบว่ามันไม่ส่งข้อมูลไป คราวนี้ผมเลยต้องมาไล่ดู Request ที่ส่งไปที่ JSON-Server มันส่งไปจริง หรือป่าว และส่งอะไรไปบ้างครับ โดยสิ่งที่มีก่อนครับ Node.js Editor อะไรก็ได้ครับ เพราะ เราเขียน JavaScript เรียกใช้งาน JSON-Server ครอบอีกทีนึงก่อนครับ สำหรับขั้นตอนมาลุยไปพร้อมๆกันเลยครับฃ สร้าง Project สำหรับ Node ด้วยคำสั่ง npm init -y  ซึ่งได้ผลลัพธ์เป็น package.json  ที่ทำหน้าที่เก็บข้อมูลของ Project และ Package ที่เกี่ยวข้อง ลง JSON-Server ถ้าไม่มีใช้คำสั่ง npm install json-server –save  ติดตั้งที่ Local เลยครับ ถ้าใน Global แล้วใช้คำสั่ง Link ครับ ทดสอบ Code ดังนี้ครับ โดยใช้ Lib ของ bodyParser ซึ่งจะเป็น dependency ที่ JSON-Server Require อยู่แล้วครับ ไม่ต้อง Download เพิ่มเติมอะไรครับ โดย Code ที่เราทำ มีการเรียกใช้ bodyParser แล้วทำการพ่นสิ่งที่ซ่อนใน request (req) ผ่าน console.log() ใน req.body ครับ และ ถ้าเป็น Method POST ให้เพิ่มเวลาที่สร้างไปใน Property “CreateAt” ส่วนของ Code ที่ทำตรงนี้ อยู่ด้านล่างครับ server.use(jsonServer.bodyParser) server.use((req, res, next) => {…

[TESTING] Mock Data สำหรับ API Test ด้วย JSON-Server กันครับ

หลังจากทำ BPMN ที่เป็น Servicer Task เสร็จและ โดยลองใช้ Mock REST-API จาก  เพื่อ POC (Proof of concept) แล้วนั้น สิ่งถัดมาที่ผมทำ คือ ต้องมาลองสร้างข้อมูลให้มัน Dynamic มากก่านี้ครับ ซึ่งผมได้เจอ Open Source ตัวนึงที่น่าสนใจมากครับ แท่นแท๊นนน มัน คือ JSON Server ครับ เป็น Tools ที่เกิดมาเพื่อทำ Mock REST-API โดยแท้เลยครับ มันเลยเป็นที่มาของ Blog ตอนนี้ด้วยครับ สิ่งที่ต้องมี node.js ครับ เพราะต้องใช้คำสั่ง npm install  ครับ ถ้าใครเพิ่งลงก็อย่าลืม Log-off และ Log-on เครื่องใหม่ หรือเอาง่ายสุด Restart เครื่องครับ Internet เอาไว้สำหรับ Download Tools ครับ data สำหรับ Test ครับ API แต่ละตัว ต้อง Return อะไรมาบ้างครับ ลุยเลยครับ ติดตั้ง JSON Server ด้วยคำสั่ง npm install -g json-server  ** ผมใส่ -g เพราะต้องการให้เป็น Global ใช้งานได้กับทั้งเครื่องผมครับ รอไปสักพัก ทดสอบ โดยการลองพิมพ์ json-server จะพบ help ขึ้นมาครับ ดังรูป จะลองส่อง Version ก็ได้ครับ โดยใช้คำสั่ง json-server –version  ผลลัพธ์ที่ได้ สร้าง db.json ไฟล์ db.json เป็นไฟล์ที่เก็บข้อมูลการ…