[JAVA] TOMCAT Change Default Port

พอดีวันนี้ได้เข้ามาดู 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 ท่านครับ ^___^

This slideshow requires JavaScript.

หลังจากไม่รู้อะไรตอนสั่งเลยถามทางร้าน พนักงานแนะนำ

  • ปีกไก่ทอดนาโกย่า มันมี 2 แบบ
    • แบบปกติ เค็ม/เผ็ด
    • อีกแบบ คือ ไก่ดำ อันนี้พนักงานบอกว่าออกไปทางเปรี้ยวๆนะ
  • ยากิโซะบะ – อันนี้พนักงานแนะว่ามันอยู่ท้องครบเครื่อ่ง ซึ่งผมยอมรับว่าพลาด 55555

สิ่งที่ผมลองสั่งมา

  • ปีกไก่ทอดนาโกย่า(Tebasaki) แบบปกติ มี 5 ชิ้นครับ ราคา 130 บาท

    • ไก่อร่อยจริงๆครับ หนังกรุบกรอบ รสชาติออกไปทางเผ็ด/เค็ม อันนี้ผมเดวๆ มันน่าจะใช้ซอสพริกไทยดำ กับน้ำมันหอย (อันนี้เคยลองทำไก่ทอดแล้วได้สูตรที่มันคล้ายๆนะ แต่บังไม่ลงตัวแบบนี้)
    • เนื้อนุ่ม ฉ้ำๆครับ นุ่มจนเลาะเนื้อออกมาจากกระดูกได้ง่าย
  • คิชิเมงร้าน และโมจิ (Chikara Kishimen) ราคา 180 บาท

    • มีน้ำซุปกับเส้น อร่อยดีครับ แต่น่าจะเชื่อพนักงานลองสั่งยากิโซบะครับ
    • ได้กินโมจิครั้งแรก – เออเข้าใจเลยว่าทำไมมันมีข่าวแนวๆว่าโมจิติดคอตายได้ มันเหนียวนุ่มครับ

มาดูที่ค่าเสียหายกันบ้างดีกว่าครับ

  • ตามรูปเลยครับ
  • รสชาติใช้ได้เยี่ยมเลยครับ แต่เรื่องราคามันต้องคิด
    • Service Charger 10%
    • VAT 7%
  • สำหรับใครที่จะจ่ายเงินสดต้องเตรียมเงินให้พอด้วยครับ ^___^

ทำเลที่ตั้ง

  • ซอยสุขุมวิท 39 รูปปั๊นลุงเจ้าของร้านเด่นมากครับ ถ้านั่ง BTS เข้ามา เดินทางมาประมาณ 12-15 นาทีครับ โดยร้านจะอยู่ใน The Manor ครับ จริงๆมันมีราเมงอีกร้านด้วยครับ แต่ผมเข้าผิด 55555

 

 

[DB2] Query แบบ Check & Next

จริงๆ Blog นี้เกิดจากการได้เป็นผู้โชคดีไปช่วยน้องในทีม Run Script สำหรับ UAT ครับ โดยที่น้องคนนั้นก็ไม่ค่อยมั่นใจกับ Script ครับ เมื่อทดสอบที่ Site ลูกค้าจริงแล้วพบว่า

อ้าวเฮ้ยยยย ไม่เหมือนที่คุยกันไว้นี่นา
ที่บอกว่า Migrate ครบ แต่อ้าวข้อมูลหายไป
อ้าวเฮ้ย อย่ากลืนน้ำลายตัวเองดีกว่า
เสียเวลาร้องขออะไร
สุดท้ายข้อมูลก็ต้องกลับคืน (มันของลูกค้า ไม่ได้ข้อมูลครบคงหัวขาด)

ทำไมถึงเป็นเช่นนั้นหละ ทำไม Script ที่มีการซักซ้อมมาอย่างดีถึงเกิดปัญหาตอนใช้จริง มาดูโครงสร้าง Script กันดีกว่าครับ โดยได้ทำเป็น Batch File ชุดนึงครับ (ไฟล์ migrate.bat )

ข้างในมีเนื้อหาประมาณนี้ครับ

  • ชองดั่งเดิมมี TABLE SYSTEMINFO ซึ่งมีโครงสร้างตาม Script (ของจริงมี 100 Column แต่อันนี้ของตัดมา เพื่อไม่ให้ Blog ยาวเกินไปครับ
  • ตัวอย่างข้อมูล
  • สร้าง Table TMP_SYSTEMINFO ด้วยคำสั่ง เพื่อ Backup ข้อมูลไว้ก่อน (ไฟล์ 21TMP_SYSTEMINFO.txt )
  • ย้ายข้อมูลจาก Table SYSTEMINFO ไปที่ Table TMP_SYSTEMINFO ด้วยคำสั่ง (ไฟล์ 22MOV_FROM_SYSTEMINFO_TO_TMP_SYSTEMINFO.txt )
  • DROP Table SYSTEMINFO ทิ้ง
  • Create Table SYSTEMINFO ใหม่ขึ้นมา ที่ต้องทำแบบนี้ เพราะ Table ขนาดมันเกินจาก PageSize ต้อง DROP และ Create แยก ครับ(ไฟล์ 31NEW_SYSTEMINFO.txt )
  • นำข้อมูลจาก Table TMP_A ย้ายกลับมาคืน Table A (ไฟล์ 32MOV_FROM_TMP_SYSTEMINFO_TO_SYSTEMINFO.txt )
  • DROP Table TMP_A ทิ้ง ด้วยคำสั่ง

แต่พอลองทดสอบทำงานจริง อ้าวววววววว Schema ไม่ตรงกัน พบ Script แรกมัน Error แต่ที่มันจะต้องหยุดกลับต้องทำงานต่อไป DROP ข้อมูลทิ้งเลย

ซุนวูกล่าวไว้ว่า รู้เขารู้เรา รบร้อยครั้งชนะร้อยครัั้ง

แต่นี่รู้ไม่ครบ แล้วต้องทำอย่างไร กลศึกมีไว้พลิกแพลงครับ เราก็เล่นแบบ Safe สิ Execute Script ดู Error ถ้าไม่มีแล้วทำงานต่อ ดู Return Code ครับ

  • Windows ดูค่าจากตัวแปร %errorlevel%
  • Linux / AIX ดูค่าจากตัวแปร "$?"

ค่าที่ 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 SQL statement error
    8  Command line processor system error

ลองมาปรับใช้กันครับ Blog นี้เอาเฉพาะของ Windows ก่อนครับ โดยถ้า Error  Script หยุดทำงานครับ โดยเพิ่ม Section มา 2 ส่วน

  • ดักเงื่อนไข
  • ดักเมื่อเกิดเหตุการณ์
    • ERROR – จะถูกทำงานเมื่อมี Error
    • END – Clear ข้อมูลทิ้งครับ
  • ภาพรวมของ Script ครับ  ไฟล์  migrate_withcheck.bat  ครับ
  • ตัวอย่าง การ Run ครับ จะเห็นว่า ถ้า Error มันไม่ทำงานต่อแล้วครับ ปลอดภัยระดับนึงครับ โดยผมอาไปแก้ Script ในไฟล์ 22MOV_FROM_SYSTEMINFO_TO_TMP_SYSTEMINFO.txt  โดยเอา , ออกไปครับ เอา DataType ติดกับชื่อ Column ครับ แก้แบบนี้แล้วต้องได้ ERRORCODE = 4 Return กลับมาครับ
    • คำสั่งถัดไป คือ DROP ครับ ถ้า Execute ต่อก็งานเข้าครับ
    • ผลการทดสอบครับ มันไม่ทำคำสั่ง DROP ครับ ^___^
  • มีข้อสังเกตุด้วยนะครับ
    • สังเกตุว่าใน ฺBAT ของเรามีคำสั่งเพิ่มขึ้น 2 คำสั่งครับ ต่อการ Execute Statement ด้วย db2 มันเยอะมาก ถ้าต่อยอดทำ Tools ก็สามารถทำได้ครับ
    • อันนี้เอาไปประยุกต์กับพวก Transaction ได้ด้วยครับ

อ๋อสุดท้ายเห็นมีหลายคน ถามว่าผมทำงานอะไรนะครับ เป็น Developer ถ้าภาษาทั่วไป Programmer กรรมการ IT แหละครับ ไม่ได้เป็น DBA นะครับ ^__^

Reference

[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 มันหายไปครับ หลังจากไล่ไปไล่มา โดยดูจาก

ในที่สุดก็พบปัญหาแล้วครับ เนื่องจากตัว 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 มาครอบ เพื่อจัดการ Request แทนครับ สำหรับ Code ที่เชียนจะใช้ Code ต่อจาก Blog ตอนก่อนครับ โดยเพิ่มการดัก Request ที่เป็นประเภท Chunked

  • Request – ON ให้รอรับ Chunked ที่เข้ามาครับ
  • Request – END เมื่อรับ Request มาหมดแล้ว ให้ทำอะไรต่อครับ สำหรับผมให้แปลงเป็น JSON ครับ
  • ส่งต่อให้ตัว JSON-Server คำสั่ง Next()
  • Code ที่ใช้ทั้งหมดครับ โดยตัว Request แบบ Chunked ให้ทำงานตอนมีการส่งข้อมูลแบบ POST / PUT และ PATCH ครับ และปรับให้ Request – ON กับ Request – END ทำงานต่อกัน

Code ของ Middleware ทั้งหมดครับ

Reference

[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 ที่ทำตรงนี้ อยู่ด้านล่างครับ
  • Code สมบูรณ์ทั้งหมด ไฟล์  middleware.js ครับ
  • ทดสอบ Run ครับ สิ่งที่ต้องมี
    • ไฟล์ db.json << ใน Code Require ครับ ถ้าไม่มีมันสร้างไฟล์เปล่ามาให้ครับ สำหรับผมก็ใช้จาก Blog ตอนที่แล้วครับ อิอิ
    • Run ด้วยคำสั่ง node  middleware.js  ครับ
  • ลองยิง Request เข้ามาครับ
    • ลองจาก Postman
    • ลองจาก BPMN << ปัญหาที่ทำให้ต้องเกิด Blog นี้เลยครับ
    • มาดูผลลัพธ์ที่ Console นะครับ สิ่งที่ Highlight เกิดจากคำสั่ง Console.log ที่เราได้ Customize ไปครับ

หลังจากเขียน Blog นี้เสร็จคงต้องกลับไปลองดู Script ที่เขียนแล้วว่ามันผิดตรงไหนครับ T___T

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

หลังจากทำ BPMN ที่เป็น Servicer Task เสร็จและ โดยลองใช้ Mock REST-API จาก http://www.mocky.io เพื่อ 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 เป็นไฟล์ที่เก็บข้อมูลการ Mock ของ API แต่ละอันครับ
  • อย่างไฟล์ตัวอย่างด้านบน มี API ของ requests และ projects ครับ
  • NOTE: ถ้าสังเกตุดีๆ พบว่ามี Property Id ที่ต้องอยู่ใน db.json อาจจะงงว่าทำต้องใช้ Id เพราะมันเป็ฯที่นิยมในการใช้ครับ แต่จริงๆ มัน Custom ได้จากคำสั่ง  json-server --id  ครับ

Deploy Mock API

  • เมื่อมีไฟล์ db.json แล้ว จะรออะไรหละครับ CD เข้าไปที่ Path ที่เก็บไฟล์ แล้ว Start Server ขึ้นมาเลยครับ ด้วยคำสั่ง  json-server --watch db.json  ตอนนี้ตัว JSON Server สร้าง API ขึ้นมา 2 ตัวครับ คือ requests และ projects ดังรูปครับ
  • ถ้าลองเข้าที่ http://localhost:3000/requests พบข้อมูลที่เรา Mock ไว้ ดังรูปครับ

ทดสอบผ่าน Postman บ้างครับ

  • Postman เป็น Tools ที่เข้ามาช่วยจัดการ API-Test เลยครับ

กรณีทดสอบของ Mock API ครับ

  • ดึงข้อมูล requests ตาม id
    • คำสั่ง GET: http://localhost:3000/requests/1
  • ดึงข้อมูล projects ตาม id
    • คำสั่ง GET: http://localhost:3000/projects/123
  • ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ “wait-for-proceed”
    • คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed
  • ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ “wait-for-proceed” โดยเรียงตาม Id จาก มากไปน้อย DESC
    • คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=desc
  • ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ “wait-for-proceed” โดยเรียงตาม Id จาก มากไปน้อย ASC ที่ละ 1 รายการ
    • คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=asc&_limit=1
  • Update ข้อมูล request ที่ Id = 1 ให้ requeststatus มีค่าเท่ากับ “completed”
    • คำสั่ง PATCH: http://localhost:3000/requests/1
    • จากอันเมื่อกี้จริงๆ ส่งคำสั่ง PUT ก็ได้นะ แต่ PUT ต้องส่งไปทั้ง Object เท่านั้น โดย Object ที่ส่งไป
      • ถ้า PATCH
      • ถ้า PUT
  • เพิ่ม Request บ้าง
    • คำสั่ง POST: http://localhost:3000/requests/
  • NOTE: พวก PATCH / POST / PUT อย่าลืมกำหนด Content-Type ด้วยนะครับ
  • ลบ Request ที่ Id มีค่าเท่ากับ 5 ออก
    • คำสั่ง DELETE: http://localhost:3000/requests/5

 

[ENDNOTE] กำหนด Filter ที่ใช้สำหรับ Import Reference (Import Filters)

หลังจากปฏิเสธการจัดการ Reference ด้วย EndNote มานาน มันถึงวันที่ต้องใช้แล้วแหละ แต่จะพิมพ์เข้าไปในโปรแกรมเองมันจะดูถึกเกินไปครับ มาลองหา Reference ตามแหล่งสืบค้นต่างๆ แล้ว Import เข้ามาดีกว่าครับ มาลองกันครับ

  • มาลุยกันดีกว่าผลลองค้นงานวิจัย “Mutation Operator in BPMN Model” ครับ
  • มากดที่ปุ่ม Cite ครับ มันมี Format ของแต่ละโปรแกรมออกมาครับ ตอนนี้ผมจะเลือก EndNote ครับ
  • มาดูเนื้อหาที่เราได้มาครับ มันเป็น Format Import อะไรสักอย่างครับ
  • ถ้าไปดูลิงค์ข้างตรง Cite มันมีขึ้นมา View on ACM ครับ โดย ACM วารสารทางด้านคอมพิวเตอร์ครับ จะออกไปสายงานวิจัยหน่อย
  • ตอนนี้รู้แล้วว่าเนื้อหา มันเป็น Format ของ ACM ครับ  ปัญหาแล้ว EndNote รู้จัก ACM ไหม คำตอบ คือ EndNote รู้จักครับ แต่ต้องเพิ่ม Filter ให้มันก่อนครับ
  • Download Filter ได้ครับ จาก Paper อันนี้ ผมค้นหาของ ACM ครับ
  • โดยได้ไฟล์  ACM Digital Library.enf  ติดตั้งโดยการ Double-Click เลยครับ
  • ตรวจสอบก่อนว่าติดตั้งแล้วครับ โดยไปดูจากเมนู Edit >> Import Filters >> Open Filter Manager
  • ถ้ามี Filters แล้ว จะเห็น ACM Digital Library ครับ
  • ลุยย Import เลยครับ โดยนำ Cite ที่ได้ Save เป็นไฟล์ .txt ครับ จากนั้น Import โดยมีขั้นตอนตามรูปเลยครับ สังเกตุว่าตรง Import Options ผมเลือก ACM Digital Library ครับ

[ENDNOTE] ติดตั้ง Style ของ IEEE

ทำไมต้องลง Style หละ

  • ช่วยให้ Output ของแหล่องอ้างอิงมีความสอดคล้องกันทุกจุดครับ โดย End Note ทำหน้าที่เก็บข้อมูลเป็น Master Data ไว้ ถ้าจะ Export แบบไหน ก็ Import Style เข้ามาติดตั้งครับ สำหรับผมใช้ตัว IEEE Style ครับ

สำหรับขั้นตอนการติดตั้ง Style ของ IEEE มีขั้นตอน ดังนี้

  • Download IEEE Style ได้จาก https://endnote.com/downloads/style/ieee
  • ได้ไฟล์ .ens มาดังรูป
  • เปิดไฟล์ .ens ครับ เลือกเมนู File > Save as
  • ตั้งชื่อใหม่ครับ
  • กลับมาที่ Reference Database เมื่อกด Drop down ลงมาพบ IEEE ตามที่ Save ไว้
  • Note: ถ้าไม่มีให้เลือก Select Another Style แล้วหา IEEE ที่ได้ Save ไปครับ

ต่อไปก็ต้องนั่งไล่ Review Propasal อีกครั้งครับ สู้ต่อไปปป

[WIN] ลดพื้นที่ของ OS ด้วยคำสั่ง Compact

เนื่องจากช่วงนี้ได้รับหน้าที่ทำให้ตัว Automate Test มันเกิดขึ้นจริงบน แต่ผมต้องทำกับ Software ที่เป็นกลุ่ม .Net ที่ไม่ใช่พวก .Net Core / Standard ครับ มันเป็นระบบเก่าพอสมควร ดังนั้น ถ้าทำ Automate Test เลยต้องทำบน OS Microsoft Windows ครับ ซึ่งปัญหาของมันหลักๆเลย กี่ที่เยอะมากครับ ยิ่งถ้าเอา VM ไปวางบน Host แล้ว เนื่อที่สำคัญมากครับ หลังจากค้นๆคำพบที่ลดพื้นที่ของ Windows 10 ได้แก่

  • Disk Cleanup
  • ลบโพลเดอร์ Windows.Old (กรณีที่เป็นการ Upgrade จาก OS เก่า)
  • เอา App ที่ไม่จำเป็นกับงานเราจริงๆ ออก โดยเฉพาะพวกที่แถมมากับ OS อย่างพวกเกมส์ทั้งหลาย
  • ตั้ง Storage Sense เพื่อลบไฟล์ขยะแบบอัตโนมัติตามช่วงเวลาที่กำหนด
  • และวิธีสุดท้ายที่ผมเพิ่งพบ คือ การ Compact OS

Compact OS คือ อะไร

  • บีบอัดไฟล์ของระบบ Windows กับไฟล์ที่ติดตั้งมาพร้อม OS โดยจะถูกบีบอัดในไฟล์ .WMI ซะส่วนใหญ่นะ
  • ผลของการบีบอัด หรือได้ พื้นที่คืนมาตั้งแต่ 1.6GB (ลง OS ใหม่ ทดสอบบน Windows 10 April Update 1806 ครับ) หรือมากกว่านั้น
    • เหมาะสำหรับงานพวก VM และ Notebook บางรุ่นที่มี SSD น้อยนิดครับ
  • ข้อเสียของมัน คือ การเราต้องการใช้ไฟล์ที่ถูกบีบอัดไว้ ต้องใช้เวลานิดนึง
    • ถ้า CPU ไม่แรงพอ ไม่แนะนำครับ

Compact OS อย่างไร (Run CMD as Admininstrator กันก่อนครับ)

  • ตรวจก่อนว่ามีการ Compact OS ยัง ด้วยคำสั่ง
  • Compact OS ด้วยคำสั่ง
  • ยกเลิกการ Compact OS ด้วยคำสั่ง

หมายเหตุ: ระหว่างที่ทำ VM สำหรับ Automate Test ผมยังไม่เจอ ไม่พบวิธีทำ Test บน Docker Image ของ Windows  นะครับ