ตอนแรกผมเข้าไปหาม็อดใน 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+]
เพิ่มในส่วนที่เกี่ยวกับ GitHub และย้ายฐานข้อมูลและโปรแกรมไปไว้ที่ Docker
เพิ่มในส่วนที่เกี่ยวกับ Kubernetes (K8s) และย้ายฐานข้อมูลและโปรแกรมไปไว้ที่ Kubernetes แทนแบบเดิมที่รันบน 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.เพิ่มในส่วนที่เกี่ยวกับไฟล์ตั้งค่า 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"
}
]
}
แก้บัคและเพิ่มประสิทธิภาพของ Lexical Analyzer
เพิ่มการรองรับ Localisation รูปแบบพื้นฐาน (basic format)
- 1.เพิ่ม field 'flags' เพื่อกำหนดสถานะของ records นั้นๆ
- 2.ย้ายข้อมูล Configuration ออกมายัง config.json โดยสมบูรณ์
- 3.สามารถ Up/Download ข้อมูลใน spreadsheet ทั้งแบบกแยกและแบบทั้งหมดได้โดยสมบูรณ์
รองรับการสั่งงานผ่าน 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
แก้บัคโควต้า request เต็ม (Google_Service_Exception ErrorCode:429)
- 1.เพิ่มระบบสร้างหรือลบชีตเองอัตโนมัติ
- 2.เพิ่มระบบจำกัดสิทธิ์ในการแก้ไขชีต
- 3.เพิ่มระบบจัดการรูปแบบแสดงผลในระดับ cell
- 4.รองรับสเปรดชีตได้มากกว่า 1 ไฟล์ (เพิ่มจำนวนชีตที่รองรับ > 5,000,000 cell)
- 1.ปรับปรุงการแสดงผลเมนูเลือกฐานข้อมูลให้ดีขึ้น (console app)
- 2.เพิ่มโปรแกรมสร้างไฟล์ configuration (โดยปกติผมจะสร้างไฟล์ config เอง แต่พอหลังๆเกมเริ่มแตกไฟล์เป็นหลายๆร้อยไฟล์แถมยังมีโฟร์เดอร์ย่อยๆอีก เริ่มจะสร้างเองไม่ไหวเลยเขียนโปรแกรมนี้เพิ่มเข้ามาเพื่อลดเวลาตรวจสอบและลดความผิดพลาด)
- 3.เพิ่มระบบสำรองหาก Kubernetes มีปัญหา คือเพิ่ม WSL (Windows Subsystem for Linux)
- Localisation-Editor (โปรแกรมแก้ไข text)
- MadeeAI-Translator (ปัญญาประดิษฐ์ช่วยแปล)
- Conf Generator (โปรแกรมสร้างไฟล์ configuration)
- https://docs.oracle.com/javase/tutorial/
- https://www.w3schools.com/java/
- https://developers.google.com/sheets/api/quickstart/java
- https://support.office.com/en-us/article/abf52a64-560c-4f24-909f-cc549b1cb3a3
- https://support.google.com/docs/topic/1361471?hl=en
- https://docs.docker.com/get-started/
- https://kubernetes.io/
- https://www.blognone.com/node/106492