Skip to content

Latest commit

 

History

History
147 lines (113 loc) · 13.8 KB

DevDiary-Hoi4-TH-Localisation-Manager_V1.md

File metadata and controls

147 lines (113 loc) · 13.8 KB

*บันทึกการพัฒนาแอปพลิเคชัน Hoi4-TH-Localisation-Manager V1

จุดเริ่มต้นและที่มาของ Project นี้

ตอนแรกผมเข้าไปหาม็อดใน Steam Workshop มาเล่น บังเอิญเห็นม็อดภาษาญี่ปุ่น,จีน ผมก็เลยไปหาว่ามีไทยหรือเปล่า ก็ไปเจอผลงานของท่าน LanguGamesth ก็เลยเอามาลองเล่น ปรากฏว่ารองรับถึงเวอร์ชั่น 1.4.2 (ปัจจุบัน 1.6+) เข้าไปดูใน page คิดว่าเขาน่าจะหยุดพัฒนาไปแล้ว

ผมคิดว่าที่เขาไม่พัฒนาต่อปัญหาน่าจะเป็นเพราะ เมื่อเกมมีการอัปเดตเวอร์ชั่นใหม่ผู้พัฒนาม็อดจะต้องแก้ไฟล์ที่แปลให้เข้ากันได้กับเกมเวอร์ชั่นใหม่โดยเปรียบเทียบกันที่ละบรรทัดกับไฟล์ไฟล์เวอร์ชั่นเก่าแล้วคัดลอกจากของเก่ามาไว้ของใหม่ซึ่งใช้เวลาตรวจสอบนานมาก แถมบางทีจะมีข้อมูลเพิ่มเข้ามาใหม่จึงยากที่จะทำให้ม็อดทันสมัยได้เร็ว

ดังนั้นเพื่อแก้ปัญหาดังกล่าวผมจึงได้เขียนโปรแกรมตัวหนึ่งขึ้นมามีชื่อว่า MergeVersion ซึ่งต่อมาใช้ชื่อ Hoi4-TH-Localisation-Manager ทำการตรวจสอบและรวมผสาน(merge)ไฟล์เวอร์ชั่นเก่าและใหม่ แล้วเก็บทุกอย่างไว้ที่ฐานข้อมูล เพื่อสะดวกในการสืบค้นและแก้ไขคำผิด สามารถดึงข้อมูลไปสร้างไฟล์ม็อด ทำให้ระยะเวลาที่จะทำให้ม็อดทันสมัยทำได้เร็วมากขึ้น พอผมเขียนโปรแกรมนี้เสร็จ ผมก็ลองทำม็อดออกมาเล่นดู ทำไปทำมา ก็เลยอยากจะแบ่งปันให้คนอื่นได้เล่นบ้าง ก็เลยเอาไปอัปลง Steam Workshop ส่วนการแปลในช่วงแรกๆจะแปลลงบนฐานข้อมูลโดยตรง(query SQL) หรือดึงมาจากงานที่ทำกับทีมงานที่อยู่บน Google Sheet

ความรู้ที่ใช้

  • Compilers: Principles, Techniques, and Tools (Textbook)
  • Compiler Construction (วิชาเขียนคอมไพเลอร์ สมัยเรียน ป.ตรี จำได้ว่าตอนนั้นผมใช้ C/C++ เขียนคอมไพเลอร์ pointer สนุกสนาน..555 )
  • Java (พื้นฐาน)
  • SQL (พื้นฐาน)
  • Google Sheets API v4
  • Docker -> Kubernetes (K8s) [Localisation-Manager v1.0.1+]
  • Excel -> Google sheet (พื้นฐาน Functions และ formulas)

เครื่องมือที่ใช้

  • Java (ภาษาโปรแกรม)
  • MySQL (ฐานข้อมูล)
  • MySQL Workbench Community
  • IntelliJ IDEA Community Edition (Java IDE)
  • Docker Desktop (Kubernetes - K8s) [Localisation-Manager v1.0.2+]
  • WSL2 (Windows Subsystem for Linux) [Localisation-Manager v1.2.1+]

ผังการทำงานโปรแกรมเวอร์ชั่น 1.0

ผังการทำงานโปรแกรมเวอร์ชั่น 1.0.1

เพิ่มในส่วนที่เกี่ยวกับ GitHub และย้ายฐานข้อมูลและโปรแกรมไปไว้ที่ Docker

ผังการทำงานโปรแกรมเวอร์ชั่น 1.0.2

เพิ่มในส่วนที่เกี่ยวกับ Kubernetes (K8s) และย้ายฐานข้อมูลและโปรแกรมไปไว้ที่ Kubernetes แทนแบบเดิมที่รันบน Docker

แล้วทำไมต้องเปลี่ยน? ทั้งๆที่ Docker ก็ทำได้อยู่แล้ว??

เหตุผลคือ

  • 1.ต้องการศึกษาการทำงานของ Kubernetes ว่าทำงานอย่างไร เพราะ Kubernetes จะเป็นตัวจัดการ Container อีกทีและเป็นที่นิยมในท้องตลาดด้านการจัดการ Container หลังจากสงครามคอนเทนเนอร์เริ่มสงบลง

  • 2.ผมขี้เกียจรันคำสั่ง Docker run ทุกครั้งที่จะเปิดใช้งาน App (ตั้งแต่ย้ายมา Kubernetes ชีวิตง่ายขึ้นมาก ถ้าศึกษาจนเข้าใจแล้วนะ มันจะทำงานให้เองอัตโนมัติเราไม่ต้องไปยุ่งมันมากแตกต่างจาก Docker ที่เราต้องจัดการพิมพ์คำสั่งเอง มีความซับซ้อนมากกว่า Docker อยู่พอดูนะ แต่ก็ไม่ยากเกินจะศึกษา)

  • 3.ปูทางไปสู่ v2.0 เพราะในเวอร์ชันถัดไป โปรแกรมจะรันบนคลาวด์เลยมาชิมลางดูก่อน

  • 4.ฝึกเป็นทักษะติดตัวไว้เพราะโลกต่อไปนี้ ระบบต่างๆจะรันบนคลาวด์ ซึ่งโปรแกรมนี้สามารถนำไปรันบน Google Cloud , AWS , Microsoft Azure และ DigitalOcean ได้

  • 5.สนุกและท้าทายเหมือนเล่นเกมเลย เมื่อแก้บักผ่านก็เหมือนเราได้ Achievement (เป็นความบ้าส่วนตัวของผมเองครับ)

ฐานข้อมูลใน Google Sheet และ ฐานข้อมูลออฟไลน์/คลาวด์บน K8s Cluster

ผังการทำงานโปรแกรมเวอร์ชัน 1.0.3 (JSON feature)

  • 1.เพิ่มในส่วนที่เกี่ยวกับไฟล์ตั้งค่า Configuration (*.json) ที่จะประกอบไปด้วยข้อมูลสำคัญที่จะใช้ในการสร้างม็อด
  • 2.สามารถเพิ่มข้อมูลใหม่ผ่านไฟล์ json ได้
  • 3.ใช้กับโปรแกรม Localisation-Editor ได้

ตัวอย่างไฟล์ config.json

{
  "APP_VERSION": "1.0.3",
  "MOD_VERSION": "0.89.8",
  "MOD_SUPPORTED_GAME_VERSION": "1.8.1",
  "MOD_ROOT_PATH": "...",
  "MOD_ID": "...",
  "path_mapping" : [
    {"xxx1" : "xxx.yml"},
    {"xxx2" : "folder1/xxx2.yml"},
    {"xxx3" : "folder1/folder2/xxx3.yml"}
  ],
  "extra_localisations": [
    {
      "key": "MOD_TEST1",
      "number": "0",
      "text": "dummy1"
    },
    {
      "key": "MOD_TEST2",
      "number": "0",
      "text": "dummy2"
    }
  ]
}

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.0.4 (Hotfix)

แก้บัคและเพิ่มประสิทธิภาพของ Lexical Analyzer

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.0.5 (basic format)

เพิ่มการรองรับ Localisation รูปแบบพื้นฐาน (basic format)

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.0.6 (Flags)

  • 1.เพิ่ม field 'flags' เพื่อกำหนดสถานะของ records นั้นๆ
  • 2.ย้ายข้อมูล Configuration ออกมายัง config.json โดยสมบูรณ์
  • 3.สามารถ Up/Download ข้อมูลใน spreadsheet ทั้งแบบกแยกและแบบทั้งหมดได้โดยสมบูรณ์

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.1.0 (Quick Command/Command-Line Arguments)

รองรับการสั่งงานผ่าน Terminal/Command-Line ด้วยคำสั่งเพียงคำสั่งเดียว เช่น

me@console:~$ kubectl exec -it hoi4thloc-manager-pod -- sh -c "java -jar hoi4-th-localisation-manager.jar build hoi4.config.v1.9.3.env-k8s.json"
me@console:~$ java -jar hoi4-th-localisation-manager.jar build hoi4.config.v1.9.3.env-win.json

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.1.1 (Hotfix)

แก้บัคโควต้า request เต็ม (Google_Service_Exception ErrorCode:429)

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.2.0 (Sheets APIs)

  • 1.เพิ่มระบบสร้างหรือลบชีตเองอัตโนมัติ
  • 2.เพิ่มระบบจำกัดสิทธิ์ในการแก้ไขชีต
  • 3.เพิ่มระบบจัดการรูปแบบแสดงผลในระดับ cell
  • 4.รองรับสเปรดชีตได้มากกว่า 1 ไฟล์ (เพิ่มจำนวนชีตที่รองรับ > 5,000,000 cell)

ปรับปรุงแก้ไขโปรแกรมเวอร์ชัน 1.2.1 (Beta1)

  • 1.ปรับปรุงการแสดงผลเมนูเลือกฐานข้อมูลให้ดีขึ้น (console app)
  • 2.เพิ่มโปรแกรมสร้างไฟล์ configuration (โดยปกติผมจะสร้างไฟล์ config เอง แต่พอหลังๆเกมเริ่มแตกไฟล์เป็นหลายๆร้อยไฟล์แถมยังมีโฟร์เดอร์ย่อยๆอีก เริ่มจะสร้างเองไม่ไหวเลยเขียนโปรแกรมนี้เพิ่มเข้ามาเพื่อลดเวลาตรวจสอบและลดความผิดพลาด)
  • 3.เพิ่มระบบสำรองหาก Kubernetes มีปัญหา คือเพิ่ม WSL (Windows Subsystem for Linux)

ผังการทำงาน(ล่าสุด)

ส่วนขยายเพิ่มเติม

ลักษณะรูปแบบการสั่งงาน

เอกสารอ้างอิง