Videos → Poor Man's Patcher: A game modder's adventure through serverless sea without money
Description
Before the words “DevOps” and “Serverless” even become well-known, I, as a hobbyist Game Modder, was trying to achieve these 2 things using JavaScript and a lot of free services for my mod distribution patcher app. In this talk, I’ll walk you through how I did it and what’s my thinking behind.
Transcript
คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub
Ladies and gentlemen, big round of applause to welcome คุณอัฐพร ทนงเกียรติศักดิ์ค่ะ Application Architect from EGG Digital, Ascend Group Thailand!
สวัสดีครับผม สวัสดีชาว JavaScript Bangkok นะครับ ผมอัฐพรนะครับ หรือว่าชื่อบีมนะครับ วันนี้จะมาเล่าเรื่องการทำ Poor Man's Patcher นะครับ หรือก็คือ patcher ของคนไม่มีตังค์นั่นเองนะครับ ก็คืออันนี้เดี๋ยวจะเล่าให้ฟังว่าการทำ patcher ของคนไม่มีตังค์ แล้วเอาไปใช้ทำอะไรเดี๋ยวมาดูกัน เดี๋ยวเล่าเรื่องตัวเองสักนิดนึงนะครับ ก็คือว่าผมเนี่ย เป็น Application Architect อยู่นะครับ อยู่ที่บริษัท EGG Digital นะครับ แล้วก็สิ่งที่ผมชอบนะครับก็จะเป็น Angular นะครับ
จะเป็น .NET จะเป็น AWS นะครับ แล้วก็เวลาทำงานเนี่ยวันๆ ผมก็จะพูดแต่เรื่อง DevOps กับ serverless นะครับ เพราะฉะนั้นวันนี้ก็หนีไม่พ้นเรื่องพวกนี้แน่นอนครับผม
ทีนี้ Poor Man's Patcher เนี่ยเอาไว้ทำอะไร ก็คือต้องย้อนกลับมาสู่คำว่า modding กันก่อนเนอะ modding เนี่ยมันเป็นงานอดิเรกชนิดนึงที่เริ่มทำกันมานาน และการทำ modding ก็คือการเอาเกมที่เขาขายกันเนี่ย ไปเปิดไฟล์ในโฟลเดอร์ของเขานะครับแล้วก็แก้นะครับ มันก็ฟังดูเหมือนกับการเอาเกมมา hack แล้วก็โกงนะครับ แต่จริงๆ แล้วจุดประสงค์อ่ะครับก็คือเราอยากจะสร้างเกมใหม่ หรือเกมที่มีรูปแบบการเล่นหรือว่ารูปภาพที่แตกต่างไปจากเดิมนะครับ คิดว่าหลายๆ คนที่เคยเล่นเกมที่นี่นะครับ ก็อาจจะเคยเห็นเกมบางอันนะครับที่เริ่มมาจากการเป็น mod ก่อน แล้วสุดท้ายพัฒนาเป็นเกม เช่น เกมนี้ครับ Counter-Strike ครับผม ทุกวันนี้นะครับใน Steam นะครับ ก็จะเต็มไปด้วยคนเล่น Counter-Strike: Global Offensive นะครับ ซึ่งจริงๆ เนี่ย Counter-Strike เนี่ย มันเริ่มมาจากการเป็น mod ของ Half-Life เนอะ ก็คือเอา Half-Life เนี่ยมาแก้ไขไฟล์ แล้วก็ได้ Counter-Strike ขึ้นมานะครับ แล้วก็ค่อยๆ ถูกพัฒนาขึ้นมาเรื่อยๆ จนกลายเป็นเกมของตัวเองในที่สุดนะครับ อีกเกมนึงนะครับ ที่โด่งดังไม่แพ้กันนะครับ เห็นภาพนี้อาจจะ
อาจจะแบบไม่ชัดเท่าไหร่นะ มันคือ StarCraft 1 ครับผม ชื่อเกมว่า Reign of Strife ครับผม แล้วก็ต่อมาก็ถูกพัฒนาใน Warcraft 3 ครับ ชื่อว่า Dota Allstars หรือที่คนไทยชอบเรียกว่า DotA Allstars นั่นเองนะครับ แล้วก็ถ้าเกิดย้อนไปดูยุคนั้นนะครับ ก็จะมีของที่คล้ายๆ DotA แล้วคนก็หาว่าไปก็อป DotA มาครับ แต่จริงๆ ไม่ใช่นะครับ คือเขา base มาจาก mod ของ StarCraft นะครับ แล้วต่อมามันก็ถูกพัฒนานะครับ เป็นสอง MOBA ใหญ่นะครับ พูดง่ายๆ คือแนว MOBA ทั้งแนวเนี่ย ถูกพัฒนาดั้งเดิมเนี่ยขึ้นมาจาก mod นะครับ สอดแทรกนิดนึงนะครับสำหรับประวัติของสองเกมนี้นะครับ คนทำ DotA ภาคแรกอะครับ
ตอนแรกมีคนนึงชื่อว่า Guinsoo นะครับ แล้ว Guinsoo เนี่ยก็ลาออกไปจากทีม DotA ครับ แล้วก็มีคนที่ชื่อ IceFrog มาทำนะ แล้วต่อมา Guinsoo ครับก็ไปสร้าง League of Legends แล้วก็ IceFrog ก็มาทำ Dota 2 นะครับ แล้วก็อีกเกมนึงครับ PUBG นะครับ PUBG ที่ทุกวันนี้นะครับไปไล่ยิงกันใน mobile แล้วก็ในคอมนะครับ ก็เริ่มมาจากการเป็น mod ของเกม ARMA 2 นะครับผม mod เกมเนี่ยมันก็ฝังอยู่ในทุกอณูของชีวิตนะครับ มันก็จะกลายเป็นแม้กระทั่งคำพูดประจำวัน อย่างเช่นวันนี้นะครับ การที่ทุกคนเนี่ยมานั่งฟังในงาน JavaScript Bangkok เนี่ย แล้วก็พบว่า เฮ้ย ตัวเราเนี่ยมี skill เพิ่มขึ้นเนี่ย หมายความว่าวันนี้เราอาจจะหมายถึงเราแอบมา farm ป่า แล้วก็ปล่อยให้เพื่อนทำงานไป เราก็อัพเลเวล อัพของ หรือว่า เฮ้ย วันนี้เด็กฝึกงานนะครับ เขาไป learn Docker มา ไป learn TypeScript มา
เรียนรู้อีกหลายภาษา พอมาวันจันทร์มาขิงกับเพื่อนว่า เฮ้ย ออกของมาแล้ว เกิดแล้ว พร้อมลุยนะฮะ เพราะฉะนั้นทุก feature ทำได้หมดนะครับ คำพวกนี้จะไม่มีเลยนะครับ ถ้าเกิดว่าไม่มีการทำ mod นะครับ
รวมถึงคำว่า พี่ให้ผมทำงานหนักจนต้องกลับน้ำพุนะครับผม คำนี้ก็เช่นกันนะครับ แล้วก็ mod เนี่ยก็มี community มากมาย เช่น mod DB นะครับ ที่เอา mod มาแจกจ่าย คำว่าแจกจ่ายหมายถึงอัพขึ้นไปแล้วก็กดดาวน์โหลดปกติครับ แล้วก็ copy ไฟล์ไปไว้ใน folder แล้วมันก็ทับทุกอย่างที่เป็นเกมดั้งเดิมจนพังนะครับ
ซึ่งนอกจากจะพังด้วย mod DB แล้ว ก็สามารถพังด้วย Nexus Mods ได้ด้วยนะครับ แต่โชคดีนะครับที่มีเจ้าใหญ่เข้ามาเล่นด้วยครับ ก็คือ Steam Workshop นะครับ ก็เป็นนักแจก mod นะครับ แต่ว่า Steam Workshop เนี่ย ถึงคนเล่นน่ะจะสบาย แต่ว่าคนอัพหรือคนทำอย่างพวกเราเนี่ย ก็จะลำบากมากๆ นะครับ แล้ว patcher ล่ะเกี่ยวข้องอะไรกัน อย่างที่บอกครับ เมื่อกี้ก็เห็นอยู่ว่าการเอา mod มาลงเนี่ย ก็คือการแก้ game file แล้วก็เอามาทับเนอะ พอมาทับเนี่ย ก็จะเกิดปัญหาขึ้นว่า เฮ้ย ทับเวอร์ชั่นไม่ตรงกัน หรือว่าเอามาลงแล้วพัง ทำยังไงครับพี่ เกิด webboard ขึ้นมา แล้วก็ถามว่าคนทำ mod ทำอะไรออกมาวะ ทำออกมาก็เล่นไม่ได้ ทำ mod ออกมาเอาไปลบทิ้งดีกว่าอย่างเงี้ยครับ เพราะฉะนั้นเนี่ย จริงๆ เรื่องพวกนี้แก้ได้ด้วยเทคโนโลยี แต่ว่าไม่มีใครคิดจะทำ เพราะส่วนใหญ่คนที่ทำ mod เกมเนี่ย เขาก็จะนั่งทำ mod ไปเรื่อยๆ เนอะ แต่ไม่ได้มานั่งดูเรื่องการทำ release pipeline ครับ patcher ก็คือของหน้าตาอย่างงี้
ก็น่าจะเคยเห็นกันในหลายๆ เกมเนอะ ก็คือเปิดขึ้นมาแล้วก็มี interface อยู่อันนึง เพื่อมาเช็คก่อนว่าตัวเกมของเราเนี่ยมันดีมั้ย ซึ่งการเช็คเนี้ย มันก็จะแพงมาก มันมีทั้ง server ทั้งอะไรอีกมากมายนะครับที่ใช้ในการเช็ค ถ้าเกิดว่าเข้าไปดูแบบพวก open source
ที่เขาแจกวิธีทำ game patcher เนี่ย จะพบว่ามีเนื้อหาแบบที่จะต้องใช้ของแพงๆ นะครับ
ซึ่งตามหัวข้อครับผม คือ poor man's patcher ครับ ผมไม่มีตังค์นะฮะ เพราะฉะนั้นทำอะไรได้บ้าง ก็ปัญหาจากสิ่งนี้นะครับ
patcher ขึ้นมา ผมก็ต้อง restart มันเนอะ แล้วถ้าเกิดว่ามีอะไรพังเนี่ย ก็โดนด่านะครับ โดนด่าโดนว่าไม่พอนะผม พอลงไปแล้วพัง หรือว่าเค้าแบบอยากจะถอน mod ออกอย่างเงี้ย กลายเป็นว่าถอนไม่ได้ เพราะว่าเค้าก็โหลดไฟล์แล้วก็ก็อปทับแล้วก็พังไปหมดแล้ว แล้วก็มาด่าว่าผมเนี่ย ทำอะไรออกมา ทำไมทำให้เกมเค้าพังอะไรอย่างเงี้ยครับ แต่จริงๆมันก็คือควรจะต้องมีการ backup ซึ่งไอ้คำว่า backup ไปบอกกับคนเล่นทุกคนเนี่ยก็คงไม่ได้ แล้วก็บางทีเนี่ยมีการเล่นแบบ multiplayer นะครับ การเล่น multiplayer เนี่ย พอ version ไม่ตรงกัน มันก็จะเล่นด้วยกันไม่ได้ เกิดปัญหาอีก แล้วก็เวลาจะอัปโหลดทีก็ต้องมานั่งดู version อะไรครับ ยุ่งยากมากนะครับ คือจริงๆก็มีเหตุผลอีกเต็มไปหมดครับ ไม่รู้จะด่ายังไงเลยนะครับ
ครับ ก็ต้องแก้ปัญหาครับ ก็เหมือนกับ developer ทั่วๆไปนะ ผมก็จะต้องหาวิธีมาแก้ปัญหามัน แต่ในยุคนั้นน่ะมันก็ยังไม่มีเทคโนโลยีเยอะเหมือนทุกวันนี้ แบบ serverless แบบ DevOps อะไรเงี้ยครับ แต่เป็นความโชคดีของผมที่บังเอิญไปเจอมันนะครับ เศร้านะครับ เพราะว่าชีวิตมันพังจากเมื่อกี้นะ แล้วไปเจอแล้วเกิดอะไรขึ้น ไปเจอแล้วก็คิดไม่ออกครับ เพราะว่ามันแพงนะครับ ก็เศร้ากว่าเดิมนะฮะ
แต่ว่าพอหายเศร้าแล้วเนี่ย มานั่งคิดๆดูว่ามันเกิดอะไรขึ้นกับชีวิตผมบ้างเนี่ย ก็ค้นพบว่าเราจะต้องทำสิ่งที่ชื่อ serverless ขึ้นมา เพราะเราไม่อยากเสียตังค์ ไม่มีตังค์สร้าง server เราไม่อยากดูแล ไม่มีทีมงาน เพราะพวกเราก็เป็นแค่เด็กมอปลาย จากหลายๆประเทศที่มารวมกันในห้องแชท แล้วก็นึกอยากจะสร้าง mod ขึ้นมา แต่ว่าคำว่า serverless นะครับ ในสมัยนั้นมันยังไม่มีนะครับ เพราะฉะนั้นในฐานะ gamer เราก็ต้องตั้งชื่อให้มันนะครับ เปิด dictionary ขึ้นมาหาคำว่าไม่มีตัวตน เป็นวิญญาณ
เป็นผีนะครับ เราได้คำว่า Ethereal Mod Server มาครับ โคตรเฟี้ยว
เนี่ยแหละครับ ผมก็เดินเข้าไปในห้องแชทนะครับ กับเพื่อนๆ ที่แบบมาจากต่างชาติหลายๆ ประเทศรวมกัน แล้วบอก "Hey guys, I have a new system for you. It's called 'Ethereal Mod Server'. We will be selling our mods for free."
มันทำยังไงครับ ก็สิ่งที่ผมคิดในใจตอนนั้นนะ ก็เนื่องจากว่าผมก็อยากจะให้มันไป download mod ลงมาเนอะ ก็คืออยากจะให้มันไปอ่านอย่างเดียว ก็คือเป็น read-only พี่ แล้วก็มันเนื่องจากว่า เราไม่รู้ว่าตัวเกมจริงๆ อ่ะ มันจะอัปเดตแล้วมันจะเปลี่ยนโฟลเดอร์ไหม กลายเป็นว่า mod เราพังอีก เราก็ต้องเปลี่ยนโฟลเดอร์ตามถูกไหมครับ เราอยากจะเอา instruction เนี้ยใส่ไปกับ patcher ด้วย เพื่อที่ในอนาคตเนี่ย แล้วเกมตัวหลักเนี่ยมันมีการเปลี่ยนโฟลเดอร์ เราก็จะได้เปลี่ยนโฟลเดอร์ mod ของเราตามเนอะ แล้วผมก็ไม่อยากให้ตัว patcher เนี่ยมันอัปเดตตัวเอง แล้วกลายเป็นต้อง restart ใหม่ หรือว่าต้องให้ผู้เล่นเนี่ยไปดาวน์โหลดมาซ้ำอีกทีนึงนะครับ แล้วก็การเปิดปิดเนี่ยมันควรจะง่าย
การเอา mod ออก เอา mod เข้า คือผู้เล่นอยากจะปรับเปลี่ยนเมื่อไหร่ก็ควรจะต้องทำได้ ไม่ใช่แบบเอาออกแล้วพังแล้วก็โดนด่าอีกนะครับ งั้นทำยังไง ก็ตัวผมในตอนนั้นนะครับ ก็เป็นนักเรียนมอปลายที่เขียนได้ไม่กี่ภาษานะ ที่เขียนได้ก็อย่างเช่น C# นะครับ แล้วก็ C++ C แล้วก็ JavaScript นะครับ
ซึ่งตอนนั้นก็จะมีแต่ jQuery นะ ผมก็นึกอะไรไม่ออก เพราะว่าผมก็เขียนภาษา scripting เป็นภาษาเดียว ก็คือ JavaScript แล้วภาษาที่ใช้เขียนโปรแกรมแบบเป็นเรื่องเป็นราว เป็น Windows Form ได้ก็คือ C# ผมก็เลยเอามันมารวมกันนะครับ เป็นรูปนี้นะครับ พระเอกของเรื่องนี้คือ JavaScript ทั้งๆ ที่ในรูปเนี่ยก็มีอยู่แค่กล่องเดียวนะครับ อยู่ตรงกลางสีเหลืองๆ มันคืออะไร ก็คือเราเอาโปรแกรมของเราเนี่ย ตัว patcher เนี่ย ก็แบ่งตาม architecture นะครับ ก็คือว่ามี UI มี logic แล้วก็มีส่วนที่เป็น adapter เอาไว้ต่อกับโลกภายนอกนะครับ โลกภายนอกก็อย่างเช่นโฟลเดอร์เกมของผู้เล่นนะครับ แล้วก็มี database ที่อยู่ในตัวนะครับ แน่นอนนะครับว่าต้องใช้ SQLite นะครับ เพราะว่าเราอยากจะใช้โฟลเดอร์ของเขา
ในเครื่องของเขาอ่ะครับ เราไม่อยากต่อ database ข้างนอกนะครับ เพราะผมไม่มีตังค์ฮะ เหมือนเดิม แล้วก็
คุณมี MongoDB ของคุณนะครับ
ผมมี Google Sheet ของผมนะครับ
นี่คือ database ของผมนะครับ ผมไม่มีตังค์อะ จะทำไง แน่นอนครับ คุณมี S3 ของผม คุณมี Google Storage ของคุณ แต่ผมมี Dropbox สบายนะครับ แค่นี้ผมก็สามารถมี database ที่เอาไว้เก็บว่า แต่ละ version เนี่ย มันมีไฟล์อะไรบ้างที่ต้องใช้ ต้องเอาไว้ใน folder ไหน แล้วก็นอกจากนี้ผมยังมีไฟล์ JavaScript ที่เอาไว้เก็บด้วยว่าเราจะต้องเปลี่ยน logic ในการลง mod ยังไง แล้วเราก็เอาไฟล์ JavaScript เนี่ยโยนไปให้ patcher นะครับ หมายความว่า patcher ของผมที่เขียนด้วย .NET เนี่ย ก็จะไม่ต้องอัปเดต ผมแค่ดาวน์โหลด JavaScript version ใหม่มาทับมัน แล้วก็เอา code .NET ของผมเนี่ย ไป call JavaScript แปลว่าหลังจากนี้ user ก็จะไม่ต้องมารีสตาร์ต ตัว browse ตัว patcher อีกต่อไปนะครับ แล้วผมก็ไม่ต้องจ่ายตังค์ด้วยนะครับ เอาล่ะ ต่อไปครับ เนื่องจากมันเป็นอย่างนี้ใช่มั้ยครับ แปลว่าผมจะต้องเวลาอัป version ใหม่ทีนึง ผมก็จะต้อง copy ไฟล์ไปโยนใน folder Dropbox นะ แล้วผมก็จะต้องเปิด Google Sheet ขึ้นมา แล้วก็ไปเพิ่ม entry ใหม่หรือว่าไปแก้ไขมันนะครับ ซึ่งพอผมกับเพื่อนทำไปได้สัก 10 version เนี่ย ก็เริ่มรู้สึกว่า ethereal mod server เนี่ย
มันชักจะใช้ยากเกินไป และก็เลยคิดว่า เฮ้ย แต่จริงๆ ปัญหาเนี้ย ไม่ได้อยู่ที่คนเล่นนะ คนเล่นก็รู้สึกสบาย ปัญหาอยู่ที่พวกเราครับ เพราะฉะนั้นเรื่องเนี้ยคือเรื่องของ DevOps
แต่ยุคนั้นนะครับ ก็ยังไม่มีคำว่า DevOps นะฮะ และเราที่เป็น gamer จะทำยังไงครับ ก็ต้องตั้งชื่อครับ Automatic Release System โคตรเท่
Hey guys, I have a new system for you. So we can release our mod easier, faster, quicker. We are the best, man, cool. แล้วทุกคนก็ดีใจกันใหญ่ครับ โอ้โห เราจะได้ปล่อย mod กันอย่างรวดเร็วครับ มันทำยังไง ก็อันดับแรกต้องมาเขียน requirement ก่อนนะครับ เราอยากได้การอัพเดต version ให้กับ client
เนี่ยแบบง่ายๆนะ แล้วก็ช่วยลดงานผมเหอะฮะ เพราะว่าวันๆเนี่ย มี mod ที่ต้องทำอยู่นะครับ แล้วต้องมานั่งทำ automatic release system ที่โคตรคูลนี้นะครับ ถึงมันจะเท่ก็เถอะ แต่ว่ามันก็นะ มันก็เสียเวลาที่เราจะไปทำ mod ของเรานะครับ เพราะฉะนั้นมาดู architecture กันนะครับ ก็ไม่มีอะไรมาก มี mod updater หนึ่งตัวครับ mod updater เนี่ย เอาไว้ทำอะไร มันคือหน้าเว็บหน้านึงเลยครับ เพราะว่าที่เหลือทุกอย่างที่เห็นนะครับ ไม่ว่าจะเป็น version token หรือว่าการต่อ API เข้า Google Sheet หรือ Dropbox เนี่ย มันก็เป็น HTTP call ตัวผมซึ่งเป็นเด็กม.ปลายไม่รู้เรื่องในตอนนั้นนะครับ อ๋อ เป็น HTTP ใช่มั้ย ก็เอา Ajax ยิงมันเลย ก็เลยสร้างเว็บขึ้นมาอันนึงนะครับ เอาไว้ปล่อย mod ของตัวเองนะครับ มันก็จะไปอ่านไฟล์ใน folder ของผม แล้วก็อัพโหลดขึ้นไปตาม API นะครับ เพราะฉะนั้นผมก็ copy ไอ้ไฟล์ mod updater เนี่ย 𝚖𝚘𝚍𝚞𝚙𝚍𝚊𝚝𝚎𝚛.𝚑𝚝𝚖𝚕 ของผมเนี่ย โยนให้กับเพื่อนทุกคนในทีมนะครับ แล้วก็บอกว่าเมื่อไหร่ที่อยากอัพเดตนะ ก็ไปอัพไฟล์ ไปแก้ไขไฟล์ version token
แล้วก็กด mod updater กดอัพโหลดหนึ่งที มันก็จะไปอ่าน folder นั้น แล้วก็อัพทุกอย่างขึ้นไปให้นะครับ เพราะฉะนั้นนะครับ ในยุคนั้นน่ะ
ซึ่งยังไม่มีทั้ง Docker ไม่มีอะไรทั้งสิ้นเนี่ย อยู่ๆผมก็ได้ค้นพบกับสิ่งที่เรียกว่า serverless แล้วก็ DevOps นะครับ ถึงผมจะตั้งชื่อให้มันเองก็ตามนะครับ นะครับผม ก็เลยกลายเป็นว่า ผมก็เลยมี patcher mod ดีๆที่เอาไว้ใช้นะครับ โดยที่ไม่ต้องเสียตังค์สักแดงเดียวเลย เสียแค่เวลานิดๆหน่อยๆ
แต่ว่าก็เป็นเรื่องเศร้าอีกนิดนึงนะครับ เพราะว่า source code ในวันนั้นนะครับ มันเขียนลงใน hard disk ที่ไม่ใช่ SSD นะครับ และมันก็ได้จากผมไปแล้วนะครับ ก็เลยไม่ได้เอามา demo ให้ดูในวันนี้นะครับ แล้วก็ diagram ที่เขียนเนี่ย ก็ไม่รู้ว่ามันจะตรงจริงๆ หรือเปล่า แต่คือผมจำได้ว่ามันประมาณนี้แหละนะครับ แต่ว่าถ้าเกิดมานั่งคิดกับเทคโนโลยีทุกวันนี้อ่ะ คราวเนี้ยเราจะทำมันยังไงดี ก็มีหลายวิธีนะครับ แต่วิธีแรกที่ง่ายที่สุด ก็ใช้ของที่มีอยู่แล้วครับ ใช้ Steam Workshop นะครับ แต่ Steam Workshop ก็อย่างที่ผมบอกนะครับ มันง่ายต่อผู้เล่นก็จริง แต่ว่าการอัปโหลดเนี่ยมันยุ่งยากเหลือเกินนะครับ เพราะฉะนั้นไม่ค่อยเหมาะสำหรับ modder นะครับ เพราะฉะนั้น DevOps ไม่ผ่านนะครับ อย่างที่สองนะครับ ก็ใช้ของ Nexus Mods นะครับ ทุเรศกว่าเดิมอีกนะฮะ
แต่ว่ามันมีระบบ DevOps ให้นะครับ
แต่ user เนี่ยใช้ไม่เป็นหรอก หน้าตาอย่างเนี้ย ไม่เชื่อลองเอาให้แม่ใช้ดูครับ เดี๋ยวรู้เรื่อง ต่อไปครับ ทำเองครับผม คำว่าทำเองเนี่ยก็คือทำคล้ายๆ ผมอ่ะ ก็สร้างขึ้นมาครับ อย่างอันเนี้ยเป็น Kaedrin's Mod Manager ครับ โดย user ที่ชื่อ Kaedrin สร้างให้เกม Total War: Warhammer II นะครับ เขาก็นั่งเขียน C# นะครับ สร้างแอปนี้ขึ้นมาอย่างเหน็ดเหนื่อยครับ แล้วก็ open source ด้วยครับ เข้าไปอ่าน code ไม่รู้เรื่องเลยครับ ก็เลยคิดว่า งั้นสร้างของตัวเองเถอะนะฮะ ทุกวันนี้นะครับ ในเมื่อเรามี JavaScript tool มากมายนะครับ แน่นอนว่าเราต้องเอามาใช้งานให้เป็นประโยชน์นะครับ เมื่อเช้านะครับ จำได้มี speaker พูดถึง code mod นะครับ คนที่ call มาจากต่างประเทศอ่ะ อันเนี้ย ผมกำลังคิดว่า เพิ่งคิดเมื่อกี้เลย ตอนที่กำลังกินข้าวอยู่ ว่าเนี่ยเราจะเอามาปรับปรุงนะครับ เราจะมา refactor– เราจะมาเพิ่ม improvement ใหม่
ให้กับ patcher ของเรานะครับ
patcher ของเราเนี่ย มันจะต้องดีขึ้นนะครับ เพราะมันคือ improvement ไง เราก็แค่จะลบโค้ดเก่าทิ้งทั้งหมด แล้วก็เขียนใหม่ด้วย JavaScript นะครับ
เพราะฉะนั้น UI เนี่ย เนื่องจากว่าแต่เดิมเนี่ย ผมก็แค่มีปุ่มลอยๆ อยู่ใช่มั้ย แล้วก็เปลี่ยน background ด้วย ของที่ดาวน์โหลดมาจาก Dropbox คราวนี้ผมสามารถ generate frontend ได้ โดยการใช้ codemods เมื่อเช้าที่เขาพูดถึง ถูกมั้ย ผมก็สร้าง AST มาอันนึง แล้วผมก็ส่ง AST มากับการดาวน์โหลดนะ แล้วก็มาอัพเดตตัว UI ให้มัน generate โค้ด เพราะฉะนั้นคราวนี้หน้าตาเปลี่ยนแบบสิ้นเชิงยังได้เลย เปลี่ยนตำแหน่งปุ่ม เปลี่ยนจุดกด เปลี่ยน animation เปลี่ยนได้หมดเลย แล้วก็ เรื่อง framework ไม่ต้องห่วงนะครับ ไม่ว่าคุณจะมาจากค่ายแดง หรือว่าค่ายฟ้า หรือว่าค่ายเขียวนะครับ ทุกอย่างรันได้ใน Electron นะครับ และแน่นอนครับ ใช้ TypeScript ได้นะครับ TypeScript อีกแล้ว ขายจังเลยวันนี้
ผมเคยเขียน C# มาก่อน ชอบ
ทุกวันนี้ก็ยังเขียนอยู่นะครับ ใน .NET Core แล้ววันนี้ก็อวย TypeScript อีก คล้ายๆ กับ speaker บางคนเมื่อเช้า เขาบอกว่ามีพนักงานลาออกไปคนนึง คนนั้นคือผมเองครับผม
ครับ แล้วก็ออกมาทำอะไรเนี่ย มาทำเรื่องศิลปินไส้แห้งอยู่ที่นี่นะครับ SQLite เหมือนเดิมครับ อย่างว่าครับ ที่เขา code มาเมื่อเช้าเนอะ มันก็เป็นความเชื่อที่ผมเอาไปขายเขาอะแหละ ก็คือเราใช้ open source อะดีครับ ใช้ open source ที่มันมีเจ้าใหญ่ back อะ ถ้าใช้ open source ที่มันเป็นเจ้าเล็กเนี่ย อยู่วันดีคืนดีมันก็ขายเหมือน Reddit เหมือนอะไรอย่างเงี้ย อยู่ๆ ก็ต้องเสียตังค์
แล้วเราก็จะไม่โดน test ด้วยครับ เพราะว่า error ทีหนึ่งเนี่ยเขาพังกันทั้งบริษัทนะครับ ตัวอย่างเช่น TypeScript พังนี่คือแบบเดือดร้อนทั่วหล้าเลยนะครับ ที่แน่ๆ Microsoft นี่เละหมดนะครับ ใครที่ทำ frontend อยู่ คล้ายๆ กับ Angular ที่เขาเคยเล่าให้ฟังนะครับ เขาบอกว่าเวลาจะ push Angular เวอร์ชันใหม่ทีนึงเนี่ย มันจะเอาไป run test ของโปรเจคทั้งหมดใน Google ที่เขียนด้วย Angular นะครับ คือ merge PR ทีนึงเนี่ยฆ่ากันให้ตาย กด merge PR ทีนึงเนี่ยนะ มันจะถูก test 10,000 โปรเจค คือเป็นผม ผมไม่กล้า merge อะเอาจริงๆ ผมปล่อย PR ทิ้งไว้ตรงนั้นแหละ ใครอยาก merge merge ไปนะ แล้วก็แก้จนถึงเช้าอะครับ เอาให้สบายใจ ส่วนโค้ดที่เหลือนะครับก็ ผมก็จะสร้าง release repo ขึ้นมาครับ ทุกวันนี้เรามี GitHub แล้วเนอะ เราก็ใช้มันให้เป็นประโยชน์ แถมใช้ public repo ได้ด้วย เพราะว่าเรา compile มาแล้วนะครับ เราสามารถใช้ repo นั้นในการแจกจ่าย mod ได้ ส่วน asset ก็อยู่ที่ Dropbox เหมือนเดิมนะครับ เพราะเราไม่มีตังค์จ่ายค่า cloud นะครับ หลายปีผ่านไปก็ยังไม่มีตังค์เหมือนเดิมนะครับ แค่เทคโนโลยีมันเปลี่ยนไป
ส่วนตัวนี้เป็นส่วน devops ที่คิดว่าเราควรจะเปลี่ยน ด้วยเทคโนโลยีทุกวันนี้ ก็คือ เรามี dev machine ใช่มั้ย เราก็ push code แต่ตอนนี้เรามี pre-push script แล้ว มี pre-push script แล้วเราก็สามารถเขียน JavaScript ของเรา แล้วเอาไป run parallel work หรือว่า run งานที่ต้องทำก่อนจะ push ขึ้น repo ได้ เพราะฉะนั้นเราก็เอาส่วนที่เป็น code ของ mod เนี่ยขึ้น repo ไป แต่ก่อนหน้านั้นมันต้องผ่าน pre-push ก่อน pre-push มันก็จะเอาพวกแบบ พวกภาพพวกเสียงพวกอะไรพวกนี้ครับ อัพขึ้น Dropbox ไปนะครับ
แล้วก็เอาไปผ่านระบบ CI/CD ครับ มีเจ้านึงที่ฟรีอยู่นะครับ ใครกำลังอยากสร้างเว็บของตัวเองเนี่ย แนะนำ Netlify ครับผม Netlify เนี่ยเป็นระบบ CI/CD ที่สะดวกต่อคนไม่มีตังค์ที่สุดแล้วครับ
ก็ขอแค่มี account GitHub นะครับ เราก็เอาไปต่อ Netlify แล้วก็ พอเค้าบอกว่าจะให้ build ด้วยคำสั่งอะไร เราก็ 𝚗𝚙𝚖 𝚛𝚞𝚗 𝚋𝚞𝚒𝚕𝚍 ครับ ตาม step แล้วเราก็ไปเขียน script อย่างอื่นไว้ใน 𝚗𝚙𝚖 𝚛𝚞𝚗 𝚋𝚞𝚒𝚕𝚍 ครับ อย่างเช่น การเอาไปอัพในเว็บ การ push mod ที่ build เสร็จแล้วขึ้นไปที่ release repo นะครับ
แต่เพื่อให้มันไม่น่าสงสัยเกิน ยังไง Netlify เค้าก็ไว้ทำเว็บเนอะ เราก็ทำ landing page ของ mod ขึ้นมาซักอันนะครับ แล้วก็อัพไปที่ mod webpage ข้างล่างนะครับ ซึ่งถ้าเราใช้ GatsbyJS เนี่ยก็จะดีมากเพราะว่า SEO มันดีนะครับ
ยิงปืนนัดเดียวได้นกสองตัวนะครับ แถมไม่เสียตังค์ค่าลูกกระสุนด้วยนะครับ
ก็ถามว่าทำไมไม่ใช้ Lambda ครับ ทำไมไม่ใช้ Firebase เพราะว่าจริงๆ แล้วเนี่ย ไอ้เรื่อง business logic เนี่ยตามหลักการที่ถูกต้องนะ เราควรจะต้อง decouple หรือว่าหั่นมันออก แล้วเอาไปไว้ที่ server ถูกมั้ย ไม่งั้นเราจะถูก hack ได้โดยง่าย แต่ว่าผมไม่มีตังค์อ่ะ ผมไม่มีตังค์จ่ายค่า Lambda แล้วก็ Firebase อ่ะ แล้ว mod ของผมมันก็ดีขนาดนี้ คนดาวน์โหลดมันก็ต้องเยอะอยู่แล้ว ยังไงมันก็เกิน free tier ครับ ถ้ามันเกิน free tier เนี่ย อ่านเลยนะ เพราะว่าบางคนเนี่ยเห็นว่า Lambda กับ Firebase เนี่ยมันเป็น free tools เนอะ คนที่แบบเริ่มเขียนแอพใหม่ๆ เนี่ยก็จะแห่ไปใช้กัน ซึ่งก็ดีครับได้ลองเทคโนโลยีใหม่ๆ แต่ถ้าเกิดแอพของคุณมันดังขึ้นมาแล้วอ่ะ ระวังนะครับ
ระวังเงินในกระเป๋าจะหายไปนะครับ แล้วคุณจะต้องสร้าง poor man's startup ขึ้นมาแทนนะฮะ
ครับผม ก็
key takeaway นะครับ ก็คือ เราต้องมีความคิดสร้างสรรค์นะ เราไม่จำเป็นที่จะต้องรอให้มันมีคำว่า serverless หรือคำว่า devops เกิดขึ้นน่ะ แต่เราก็สามารถสร้างสิ่งนี้ขึ้นมาได้ ให้มันทำงานแบบเดียวกัน ในต่อไปมันอาจจะมีคำอื่นๆ มาอีกก็ได้นะครับ ก็ดูจากอดีตที่ผ่านมานะ มันก็อย่างเงี้ยแหละ มันก็จะมีคำมาเต็มไปหมดเลย พอคำมาทีคนก็แห่กันไป ทุกคนก็ hashtag serverless hashtag devops ตื่นเต้น hashtag cicd hashtag agile hashtag scrum นะครับ
พอผ่านไป 2 ปีปุ๊บ มันก็เปลี่ยนไป hashtag อื่นๆ แล้วบอก scrum sucks นะฮะ
ก็อย่างเงี้ยแหละครับ ธรรมชาตินะครับ เพราะฉะนั้น เราไม่ต้องรอครับ เราลองอะไรประหลาดๆ รับรองมันนะครับ เพราะว่าผมมันมากนะฮะ ถ้าพวกคุณก็ควรจะต้องมันเหมือนกันนะครับ เพราะฉะนั้น สิ่งที่สำคัญที่สุดนะครับ สำหรับ key takeaway ซึ่งเป็นหัวใจในการดำเนินชีวิตของผมเลยนะ ข้อแรกครับผม จงขี้เกียจอย่างมีความรับผิดชอบครับ ก็คือ ขี้เกียจแล้วให้งานมันเสร็จอ่ะ แล้วเดี๋ยวจะคิดวิธีแบบ ที่มันทำให้เราทำงานเสร็จได้แบบฉลาดๆ ขึ้นมาเอง คือจริงๆ เราอาจจะโง่ก็ได้นะ จริงๆ ผมอาจจะโง่มาก แต่ว่าเนื่องจากผมขี้เกียจอ่ะ ก็เลยคิดออกนะครับ
ข้อต่อไปนะครับ จงมีความรับผิดชอบอย่างขี้เกียจนะครับ นะฮะ กลับกันนะฮะ ก็ทุกคนควรจะต้องมีความรับผิดชอบนะครับ แต่ก็เพิ่มความขี้เกียจเข้าไปครับ เราจะได้ทำงานเสร็จแบบคนฉลาดนะครับ ถึงเราจะไม่ได้ฉลาดจริงก็ตามนะฮะ ครับ ก็สุดท้ายนะครับ ชื่อของ อันนี้ไม่เกี่ยวนะ แต่อยากพูด ชื่อของทอล์คนี้ครับ Poor Man's Patcher นะครับ สร้างตาม item ที่ชื่อว่า Poor Man's Shield นะครับ ของเกม Dota นะครับ เห็นไหมครับว่ามันสร้างมาจาก item ที่ราคาถูกมาก มันช่วยให้ชีวิตในเลนของเราดีนะครับ แต่น่าเสียดายนะครับ ที่เขา remove ของเราไปแล้ว
ครับ สำหรับใครมีคำถามนะครับ ก็อย่าเพิ่งถามนะครับ ไปถามที่ห้อง Q&A นะครับผม ก็สำหรับวันนี้นะครับ ก็ขอขอบคุณทุกคนที่มาฟัง JavaScript Bangkok นะครับผม ขอบคุณครับ ขอบคุณค่ะ ขอบคุณคุณอัฐพรนะคะ
นั่งขำกันใหญ่เลยนะคะ เดี๋ยวเราเบรก 10 นาที แล้วเดี๋ยวกลับมาเจอกัน เดี๋ยวจะเหลืออีกประมาณไม่กี่ session เองนะคะ แล้วก็จะต่อด้วย networking party ต่อเลยนะคะ So let's take a break for 10 minutes ค่ะ Please enjoy.