Asteroid
เป็นเว็บเฟรมเวิร์คขนาดเล็กที่ผมเขียนเล่นๆ เพื่อใช้กับเว็บเล็กๆ ที่ผมคิดจะทำโดยต้องการทำเว็บจากภาษา Lua ที่ไม่ต้องติดตั้งอะไรเพิ่มเติมมากมอดูลส่วนใหญ่ที่จะเลือกใช้จะเป็น pure Lua ซึ่งสามารถก็อปปี้มาวางอยู่ในโปรเจคได้เลยไม่ต้องติดตั้งอะไรให้ยุ่งยากแต่ในส่วนของ asteroid ตัวนี้จะต้องลง WSAPI ในเครื่องด้วยเพื่อเป็นตัวกลางระหว่างเว็บเซิร์ฟเวอร์กับตัวเฟรมเวิร์ค
เนื่องจากหาเฟรมเวิร์คที่ถูกใจมาใช้ไม่ได้ก็เลยสร้างใช้เองซะเลย ซึ่งตอนนี้ยังอยู่ในระยะตั้งไข่ยังไม่สมบูรณ์และก็ไม่รู้จะสมบูรณ์เมื่อไหร่ คิดว่าจะค่อยๆ ปรับไปเรื่อยๆ ระหว่างที่ทำเว็บไปด้วย ตอนนี้ก็ใช้ได้ในระดับหนึ่งโค้ดอาจดูไม่เรียบร้อยนักเพราะผมเองก็ไม่ค่อยมีความรู้ด้านนี้มากนักก็ทดองทำไปแก้ไปเอามัน
แรงจูงใจในการเขียนเฟรมเวิร์คตัวนี้เริ่มมาจากตอนหาเฟรมเวิร์คที่ไม่ขึ้นกับ OpenResty และ LuaJIT ก็ได้พบเจอตัวที่น่าสนใจเช่น tulip เป็นเฟรมเวิร์คที่ครบเครื่องใช้ได้กับ Lua รุ่นใหม่ๆ เป็น web server ในตัวแต่ต้องอาศัย C library อย่าง cqueues ซึ่งใช้เฉพาะในเครื่องที่เป็น POSIX และผูกติดกับ PostgreSQL เป็นหลักหรือ moonmint ที่ใช้กับ Lua 5.3 ได้แต่ต้องอาศัย libuv และหยุดพัฒนาไปนานแล้วด้วยความรู้อันน้อยนิดของผมจะเอามาพัฒนาต่อก็คงจะเหนื่อยเกินไปเลยลองกลับไปขุดเฟรมเวิร์ครุ่นเก่าอย่าง orbit มาปรับใหม่ให้ใช้กับ Lua 5.3 ขึ้นไปได้ผมแก้ปัญหาเรื่องการกำหนด environment ของฟังก์ชันด้วยการสร้างฟังก์ชันใหม่มาใช้แทนฟังก์ชันของ Lua 5.1 ที่ถูกยกเลิกไปแล้ว ( ลอกวิธีมาจากบทความของผู้สร้าง Moonscript และ Lapis ) จนได้เป็น MyOrbit แต่ผมไม่ค่อยชอบวิธีแบบนี้เท่าไหร่ซึ่งถ้าจะเปลี่ยนวิธีมาใช้ _ENV แบบใน Lua5.2 ขึ้นไปค่อนข้างยุ่งยากก็เลยว่าจะเขียนใหม่หมดโดยยืมบางส่วนมาปรับใช้และลดฟีเจอร์ลงถือว่าเป็นการศึกษาไปในตัว แล้วก็ได้ดูเฟรมเวิร์คเล็กๆ อย่าง mercury ไปด้วยซึ่งก็ใช้การกำหนด environment เหมือน orbit ที่จริงผมเจอ perihelion อีกตัวซึ่งใกล้เคียงกับความต้องการมากเป็น pure Lua ที่แทบไม่มี dependency เลยนอกจากอาศัย WSAPI และถ้าใช้ sqlite กับ session ต้องใช้ LuaDBI ด้วยแต่ผมชอบสไตล์ของ mecury มากกว่าเลยตัดสินใจเขียนใหม่จนได้เป็น Asteroid ออกมา
ตอนแรกว่าจะเขียนใหม่หมดแต่จะเหนื่อยเกินเลยต้องอาศัย WSAPI เข้าช่วยปั่นจนได้รุ่นแรกออกเมื่อ 25 ธ.ค. 64 เป็นของขวัญคริสมาสพอดีรวบกับปีใหม่กับวันเด็กไปด้วยเลย 555 ตัว framework ยังไม่ค่อยสมบูรณ์มากนักแทบไม่มีฟีเจอร์อะไรเลยแค่พอทำงานได้โค้ดก็อาจยังไม่ค่อยดีเท่าไหร่ว่างๆ จะค่อยๆ ปรับ
TODO: ที่คิดว่าจะทำเพิ่มแต่ไม่รู้เมื่อไหร่ถ้าใครอยากช่วยทำก็เชิญส่งเข้ามาได้ครับ
- ทำให้รองรับ MIME types ต่างๆ ไม่ต้อง manual ใส่เองเหมือนในตัวอย่าง
- เพิ่มระบบเก็บ Log เป็น option
- upload file
ความคิดเห็น
แสดงความคิดเห็น