Author Archives: นายตาหวาน

Debug โปรแกรมของ Android บน x86 VM (VirtualBox)

โดยปรกติแล้ว เวลาที่จะ debug โปรแกรมของ Android เราจะมีสองทางเลือก ระหว่าง

1.    Deploy บนเครื่องจริง

2.    กับ ใช้ Android Virtual Device

ซึ่งทั้งสองทางเลือกนั้นต่างก็มีข้อเสีย ในขณะที่เครื่องจริงนั้นเราอาจจะไม่ได้อยากพกไปด้วย (เกะกะ) แถมต้องต่อสายมากมาย ส่วน AVD นั้นก็อืดอภิมหาอืด

หลังจากที่หาวิธี Debug ที่สะดวกกว่าการใช้อุปกรณ์จริง แต่ก็ทำได้งานได้เร็วพอที่จะใช้งานได้จริง (เพราะโน๊ตบุ๊คผมนั้นมันอืดเป็นปรกติอยู่แล้ว พอรัน AVD เข้าไปก็จะยิ่งอืดเข้าไปอีก) ก็พบว่ามีอีกวิธีนึงก็คือการรัน Android บน x86-based Virtual Machine โดยอาจจะเป็น VMWare หรือ Oracle VirtualBox หรืออื่น ๆ ก็ได้

ตัว AndroidOS นั้น จริง ๆ แล้วถูกออกแบบมาให้รันโดยไม่อ้างอิงกับสถาปัตยกรรมของระบบที่รันอยู่อยู่แล้ว แต่เนื่องจากว่าอุปกรณ์ที่เป็น Android ส่วนใหญ่นั้นจะทำงานอยู่บนสถาปัตยกรรมของ ARM ดังนั้นการที่จะเอามาทำงานบน x86 ก็มีความท้าทายอยู่ในระดับนึง โชคดีที่เรามีคนที่กำลังทำงานอยู่กับมันอยู่แล้ว นั่นก็คือโครงการ Android-x86

เราสามารถเอา iso จากเวปไซท์ Android-x86 มาติดตั้งลงบน Virtual Machine ได้เลย แต่ว่า ปัญหาคือ Android นั้นออกแบบมาสำหรับโทรศัพท์มือถือ/แท๊บเบล็ต และ โทรศัพท์มือถือเกือบทั้งหมดไม่มีพอร์ท Ethernet ซึ่ง VM ส่วนใหญ่จะใช้พอร์ทนี้ในการเชื่อมต่อกับเครื่อง Host ดังนั้นเราจึง Debug ไม่ได้… สำหรับ Android-x86 นั้นมีการเพิ่มส่วนการรองรับ Ethernet เข้ามาก็จริง แต่ก็ยังไม่รองรับ Android 3 (Honeycomb) และ Android 4.0 (Ice Cream Sandwich)

แต่เรายังมีความหวังอีกทาง เมื่อมีอีกหน่อนึงพยายามที่จะทำให้ Android AOSP นั้นทำงานได้บน Oracle VirtualBox หนุ่มรายนี้ชื่อนาย Dan แห่งเวป BuilDroid ซึ่งเจ้าหนุ่มคนนี้นั้นสามารถทำให้ Android 4 AOSP นั้นสามารถรันบน VirtualBox ได้แล้ว (แต่ยังไม่สมบูรณ์) ส่วนตัวผมยังคงโชคร้าย หลังจากที่ลองดาวน์โหลดมาใช้แล้วก็พบว่าเกิด Kernel Panic ระหว่างการบูท สันนิษฐานว่าผมใช้ เครื่องที่ใช้ CPU AMD ซึ่งไม่เหมือนชาวบ้านเขา

เหมือนความหวังทั้งสองด้านจะมืดไป แต่เดี๋ยวก่อน นาย Dan ได้สร้างของอีกอย่างขึ้นมา นั่นคือ เขานำเอา Android-x86 มารวมกับ Patch ที่เขาเขียนขึ้นมา และ ไอ้ Patch ตัวนี้นั้นมันสามารถใช้งานบนเครื่องผมได้ล่ะ !! คุณสามารถเอามาลองได้จากหน้านี้ครับ

ติดตั้ง Android 4.0 บน VirtualBox

ก็เริ่มจาก ดาวน์โหลดไฟล์ iso จากลิงค์ข้างบนมาก่อนนะครับ

ต่อจากนั้นก็เปิด Oracle VirtualBox ขึ้นมา เลือก New ที่ทูลบาร์ด้านบนเพื่อที่จะสร้าง VM ใหม่ครับ

ก็จะขึ้น Wizard ดังรูป คลิ๊ก Next ไป

ต่อไป ใส่ชื่อ ตามด้วย เลือก OS Type เป็น Linux และ Version Other Linux ครับ

ต่อไปก็ กำหนดขนาดของหน่วยความจำหลัก เครื่องโน๊ตบุ๊คผมมันแรมน้อยครับ ดังนั้นก็เลยต้องเลือกน้อยหน่อย ผมคิดว่าขั้นต่ำควรจะ 512MB แต่อันนี้ไม่เคยลองต่ำกว่านี้เหมือนกัน

ต่อไปก็คือ Hard Disk อันนี้แล้วแต่สะดวกเหมือนกัน ผมเลือกที่จะสร้างใหม่ โดยจะใช้ขนาด 8GB ครับ (เอาเข้าจริง ๆ ใช้ไม่ถึงหรอกครับ อันนี้แค่เผื่อเฉย ๆ)

พอเลือกที่จะสร้างจะขึ้น Wizard สำหรับสร้าง Disk ใหม่ ตรงนี้ตามสะดวกครับ

เลือกเป็น Dynamic Allocation จะได้ประหยัดพื้นที่ HDD ครับ

ใส่ชื่อและเลือกขนาด ผมเลือกเป็น 8GB แต่จริง ๆ แล้วตัว Android X86 เองจริง ๆ น่าจะกินที่ไม่เกิน 1GB ครับ อันนี้เผื่อไว้เฉย ๆ

ถึงตรงนี้ Disk ก็จะถูกสร้างละ

สุดท้าย VM ก็จะถูกสร้างครับ คลิ๊ก Create ไปเลย

ทีนี้ก็จะเห็น VM ตัวใหม่ขึ้นมาแล้ว (ผมให้ชื่อว่า Android 4 x86) แต่ยังครับ อย่าเพิ่งกด Start กดไปตอนนี้ก็ไม่ได้อะไรขึ้นมาครับ

ขั้นต่อไปจะเริ่มการตั้งค่า VM ล่ะครับ เลือก Settings เลยครับ จะขึ้นหน้าจอแบบนี้

เลือก System จะเห็นว่า หน้า Enable absolute point device จะถูกติ๊กอยู่ ตรงนี้ต้องเอาออกครับ ไม่เช่นนั้นพอเปิด Android ขึ้นมา ตัว Pointer จะไม่แสดงขึ้นมา ทีนี้จะหาไม่เจอครับว่าเมาส์อยู่ตรงไหน 555

ต่อไป เลือก Storage คลิ๊กตรงไอคอนรูป CD ที่เขียนว่า Empty แล้วกดปุ่มรูป CD ด้านขวา

แล้วเลือก iso ไฟล์ที่ดาวน์โหลดมาครับ (ไม่มีรูปเพราะไม่ได้ลงโปรแกรม capture ดีๆ ไว้ 555) ก็จะออกมาแบบนี้ครับ

สุดท้าย ตรงหน้า Network เลือก Attached to : Host-only Adapter ตรงนี้จริง ๆ สามารถเลือกเป็นแบบอื่นก็ได้ ขอแค่ให้เครื่องเราเห็น VM และตัว VM จะต้องถูกแจก IP ด้วย DHCP (ซึ่งในโหมด Host-Only จะแจก IP ให้ครับ) แต่ในตอนนี้เอาเป็นอันนี้ก่อนครับเพื่อความสะดวก

เสร็จก็กด OK ปิดได้เลยครับ

ทีนี้เราจะเริ่มติดตั้ง VM จริง ๆ กันละ กด Start ได้เลย

พอเริ่มแล้ว ก็รอนิดนึง มันจะบูทครับ ก็จะเข้าหน้า Boot Loader ก็เลือก Installation

รออีกนิด มันจะมีตัวหนังสือมากมาย แล้วจะเข้ามาหน้านี้ เป็นการสร้าง Partition บน Disk ครับ เลือก Create/Modify partitions

ก็เข้าหน้าสร้าง Partition เลือก New เลยครับ

เลือกเป็น Primary Partition นะครับ (จริง ๆ คิดว่าไม่เกี่ยว แต่เลือกไปเถอะ)

ใส่ขนาด ผมก็ใส่เต็มไปเลยนี่ล่ะ ง่ายดี

ถึงตรงนี้ เราเลือกที่จะสร้าง partition แล้ว (แต่ถึงขั้นนี้ยังไม่ได้สร้างจริง ๆ ครับ) ต่อไปเลือก Boot เพื่อให้ partition นี้มันบูทได้ (อันนีก็คิดว่าไม่เกี่ยว แต่ใส่ไปเถอะ)

เลือกพาร์ทิชั่น (ซึ่งมีอันเดียว)

ต่อไปเลือก Write เพื่อที่จะบันทึกสิ่งที่เราทำมาทั้งหมดลงไป ถ้าเราไม่กด Write ก่อนออกจากหน้านี้ ก็จะไม่มีอะไรเกิดขึ้นครับ (ที่ทำมาหมดก็หายหมด)

ยืนยันเสียหน่อย พิมพ์ yes แล้วกด enter

สุดท้ายเลือก quit เพื่อออก

ต่อไปก็เลือก partition ที่เราเพิ่งสร้างเสร็จครับ เราจะติดตั้ง android ลง partition นี้แหละ

ตัวติดตั้งจะฟอร์แมท partition ของเรา ก็เลือกเป็นอันไหนก็ได้ครับแล้วแต่ชอบ แต่ผมเลือก ext3 นะ (อันอื่นไม่เคยลอง)

ยืนยันอีกสักที

เริ่มฟอร์แมทละ

ต่อไปจะติดตั้งตัว Boot Loader (ถ้าไม่มีจะบูทไม่ได้) ตอบ Yes ไปเลย

อันนี้จะถามว่า จะทำให้ /system นั้นเขียนได้มั้ย ผมคิดว่าเราไม่จำเป็นต้องไปปกป้องอะไรมัน (ถ้าพังก็ลงใหม่) ดังนั้นทำให้มันเขียนได้จะมีประโยชน์มากกว่าครับ (โดยเฉพาะตอนที่พยายามจะติดตั้ง GAPP)

ติดตั้ง Android 4 อย่างรวดเร็ว

อันนี้จริง ๆ คือติดตั้งเสร็จละ แต่ว่า … สร้างตัว Fake SD Card ไปเลยดีกว่า เจ้านี่จะทำตัวเหมือนเป็น SD Card ครับ ถ้าโปรแกรมที่เราจะดีบั๊กใช้ SD Card เราก็ควรจะ Enable ไว้ จะทำให้ชีวิตง่ายขึ้นครับ

ค่าที่ให้มาคือขนาดที่ใหญ่ที่สุดที่สร้างได้ (2GB) ก็ Enter ไปเลย

เริ่มสร้างละครับ ตรงนี้รอนานหน่อย

เมื่อสร้างเสร็จแล้วมันจะบังคับให้รีบูทครับ ก็กด Enter ไป

แต่เอ่อ ถ้าเรารีบูททั้งอย่างนี้ … มันจะบูทกลับไปที่ DVD ตัวติดตั้งน่ะครับ … ดังนั้นเราต้อง Reject ตัว DVD ออกก่อน

จากนั้นก็ reboot ใหม่

ของจริงมาแล้ว เลือกอันบนโลดครับ (ถ้าไม่เลือกภายใน 5 วินาทีมันก็จะเลือกอันบนสุดให้อยู่ดี)

เข้า Android Boot Loader ละครับ เย้

ก็เป็นอันเข้าได้เรียบร้อยแล้วครับ ;-) เป็น Android 4.0.3 นะครับ

เริ่มใช้ Eclipse กับ VM ที่เพิ่งสร้างเสร็จ

ต่อไปก็เริ่มดีบั๊กกันจริงจังละครับ ;-) เริ่มจากเลือก Terminal ขึ้นมาก่อน

ที่ Terminal พิมพ์คำสั่ง netcfg จะเห็นว่ามี interface ที่ UP อยู่สองตัว ตัวแรกคือ lo หรือ loop back ซึ่งเราไม่ใช้ อีกตัวก็คือ eth0 จดเลข IP เอาไว้นะครับ

ต่อไป กลับไปที่ host เปิด command prompt ขึ้นมา (บน Windows ก็เปิด Command Prompt บน Mac/Linux ใช้ Terminal) เข้าไปยัง Folder ที่เก็บตัว Android SDK ไว้นะครับ

 

แล้วเข้า folder ที่ชื่อว่า platform-tools

พิมพ์คำสั่ง adb connect <เลขไอพีที่จดไว้> ดังนี้ครับ

เมื่อต่อได้สำเร็จจะขึ้นข้อความข้างล่าง ถือว่าประสพความสำเร็จเรียบร้อย ปิด command prompt/terminal ได้เลยครับ

ต่อไปก็ไปที่ Eclipse ใครที่ยังไม่เปิดก็เปิดซะนะครับ ตอนรันโปรแกรม ที่หน้าจอ Android Device Chooser จะปรากฎของเครื่อง VM ที่เราเพิ่ง connect เข้าไป แบบนี้ครับ

ก็เลือกซะแล้วกด OK แล้วโปรแกรมเราก็จะรันขึ้นมาได้แบบนี้ครับ

แค่นี้ก็รันได้ Debug ได้แล้วล่ะครับ :-)

อ้างอิง : Nuxeo Developers Blog, Android-x86, Buildroid

Digital ดิจิทัล ดิจิตอล … เว้ยอะไรก็ช่างแ_งเหอะ !

เมื่อสองวันที่แล้ว ก็อ่าน Blognone ตามปรกติ  เห็นมีข่าวนึงเขียนว่า รัฐบาลเกาหลีเตรียมแปลงสื่อการสอนให้เป็นดิจิตอลให้หมด

ก็มีคนมาท้วงว่า เฮ้ย คำนี้มันควรเขียนว่า ดิจิทัล ตามที่ Glossary เขียนไว้สิ

เท่านั้นแหละก็มีคนมาสาธยายความยาวว่า ไอ้คำว่า ดิจิทัลเนี่ย มันไม่ถูกนะ อย่างโง้นอย่างงี้ แล้วทำไมเราต้องไปใช้คำนี้ตามที่ “ราชบัณฑิต” บัญญัติเอาไว้ด้วย แล้วก็เริ่มลากไปไหนก็ไม่รู้ ไปเรื่องกฎหมายบ้าง

เค้าบอกว่า “คนอื่นก็เรียกว่า ‘ดิจิตอล’ ทั่วบ้านทั่วเมือง ทำไมราชบัณฑิตถึงบัญญัติคำนี้ว่า ‘ดิจิทัล’ มันไม่ถูกนะ” ก็ว่าไปเรื่อย แล้วก็บอกว่า ฝรั่งเองก็ออกเสียงคำนี้ว่า ‘ดิจิตอล’ เหมือนกัน

มันผิดตั้งแต่ ต้อน แล้วคุณ ภาษาอังกฤษมันมีเสียง ต ที่ไหน ?

ถ้าลองไปค้นหาคำนี้ในพจนานุกรมภาษาอังกฤษที่เป็นแบบ Advanced Learner มันจะระบุวิธีการออกเสียงของแต่ละคำเอาไว้ด้วยสัญลักษณ์ที่เรียกว่า Phonetic ซึ่งสำหรับคำว่า Digital เนี่ยมันจะเขียนว่า ˈdɪdʒɪtl (อ้างอิงจาก Oxford Advanced Learners Dictionary) สำหรับคุณ ๆ ที่อ่านไม่ออก ไม่ต้องตกใจ ผมก็ลืมหมดแล้ว (เคยเรียนคอร์สการออกเสียงอยู่ครั้งหนึ่ง ซึ่งเป็นเรื่องของ Phonetic ล้วน ๆ มันเป็นอะไรที่ถ้าเรียนแล้วไม่ค่อยได้ใช้ก็ลืมเกลี้ยง) แต่จะเทียบเคียงจากเสียง ดิจิตอล ก็แล้วกัน

เอาคำที่ออกเสียงชัด ๆ ว่า ทอล (ตอลนี่ ไม่มีแน่ ๆ ) นะครับ คำว่า Tall มี Phonetic คือ tɔːl ลองสังเกตว่ามันเขียนไม่เหมือนคำข้างบนนะครับ

คือไอ้ตัว tal มันไม่ได้ออกเสียงยาว ๆ แต่เป็นการรวบเสียงให้สั้น การที่ใช้ไม้หันอากาศซึ่งแสดงว่าเป็นการออกเสียงสั้น ผมว่ามันก็เหมาะสมดีแล้ว (แล้วอย่าลืม Stress ตัวหน้าสุดนะ)

แต่ประเด็นมันไม่ได้อยู่ที่ความถูกต้อง หลักภาษามันเป็นเรื่องของความนิยม ถ้ามันนิยมมันก็ใช้ได้ ไม่ค่อยมีกฎตายตัวเท่าไหร่ ไอ้ที่ทำให้ผมเซ็งเนี่ยมันคือการที่บอกว่า มันมีอันนึงถูก อันนึงผิด

ความเห็นผม มันก็ถูกทั้งคู่แหละ อันนึงถูกเพราะว่าเป็นหลักภาษา (คำทับศัพท์ภาษาไทยจะใช้การสร้างคำจากเสียงของคำจากภาษาต้นฉบับ) อีกอันมันก็ถูก เพราะคนใช้เยอะ (แปลได้อีกอย่างว่า พวกมากลากไป) เรียกได้ว่านิยม ว่างั้นแหละ

เรื่องภาษาผมไม่ซีเรียส มีปราชญ์ท่านนึงว่าไว้ว่า ภาษามันเหมือนสิ่งมีชิวิต มันมีการคัดเลือกทางธรรมชาติ คำที่ไม่มีคนใช้มันก็หายไปทุกวัน ๆ และก็มีคำใหม่เกิดขึ้นทุกวัน ผมมองว่าการใช้สิ่งที่ถูกต้องในชีวิตประจำวันก็เป็นการรักษาให้มันคงอยู่ แต่สำหรับไอ้ที่ผิดแต่นิยมก็ใช้ไปไม่ได้ซีเรียสอะไร ไม่งั้นก็โดนว่าว่าพูดไม่รู้เรื่อง (หรืออย่างกรณีคำนี้ก็อาจจะโดนว่าว่ากระแดะ พูดภาษาไทยคำ อังกฤษคำ ได้เหมือนกัน)

แต่เพราะไอ้ความคิดว่า เพราะมีคนทำเยอะ มันก็เลยถูกนี่ล่ะ มันเลยทำให้บ้านเมืองเดือดร้อนมาจนถึงทุกวันนี้ ทุกวันนี้เรามีคนที่ขายของบนทางเท้า มีแท๊กซี่ที่ไม่รับผู้โดยสาร มีมอไซค์วิ่งบนฟุตบาท (<- คำนี้ก็ผิดแต่ใช้กันเพราะนิยม คำต้นฉบับคือ Foot Path ฟุตพาธ น่ะล่ะ) แล้วพอมีคนโวยวายว่ามันไม่ถูกก็จะโดนตอกกลับไปว่ามันจะไม่ถูกได้ยังไงเพราะเขาทำกันทั่วบ้านทั่วเมือง ไอ้คนที่ไม่ทำนี่แหละผิด …

ถ้าคิดแบบนี้ไม่ต้องไปเลือกตั้งหรอกครับ เลือกคนเข้าไปตรากฎหมายทำไม มีกฎหมายไปท่านก็ไม่ทำอยู่ดี อ้างว่า เพราะทำกันมาทั่วบ้านทั่วเมืองแล้วมันจะผิดได้ยังไง ใช่หรือไม่ !

หงุดหงิดจริง …

เรื่องวุ่น ๆ กับตัวหนังสือ – ตอนที่ 5 – วาดตัวหนังสือแบบ Tile-Base

สมัยนี้หลาย ๆ คนอาจจะคิดว่าเราคงไม่ได้เขียนเกมแบบ Tile Base แท้ ๆ กันแล้ว ซึ่งก็คงจะจริงเพราะว่าส่วนใหญ่เราจะใช้การวาดกราฟิคแบบ 3D กันหมดแล้ว (ผ่าน OpenGL หรือ API อะไรก็แล้วแต่) แต่ผมว่าเรื่อง Tile Base เนี่ยมันน่าสนใจนะครับ แล้วมันก็คลาสสิคด้วย

image

ภาพข้างบนผมจับมาจากเกมที่ชื่อว่า Lufia II : Sin of Sinistral ซึ่งเป็นภาคแปลจากเกมที่ชื่อว่า Espolis Biography II … เกมนี้เป็นเกมที่ผมชอบมากเมื่อสมัยเด็ก ๆ เพราะเป็นเกมที่ต้องใช้ความคิดในการแก้ปริศนาเยอะมาก (ยากด้วย) ปัจจุบันมีการ Remake เกมนี้ขึ้นมาใหม่ กลายเป็น Lufia ภาคแรกไป (เพราะเนื้อเรื่องภาคนี้จะอยู่ก่อนหน้าอีกภาคนึง) ซึ่งไม่สนุกเหมือนตัวเก่า แต่ก็ออกมาแล้วหายคิดถึงไปเยอะเลย

นอกเรื่องมาไกล อยากให้สังเกตความเป็น Tile ของเกมน่ะครับ สำหรับเครื่องเกมในอดีต ถ้าเป็นของ Nintendo ก็นับตั้งแต่ Famicom ขึ้นมา ยันเครื่อง DS จะเป็นเครื่องที่รองรับการทำ Tile ในระดับฮาร์ดแวร์ ซึ่งทางนินเทนโดเองจะเรียกว่า Character ที่เรียกแบบนี้ก็เพราะจริง ๆ แล้วเรากำลังเขียนเกมอยู่บน Text Mode ที่สวยขึ้นมาอีกหน่อยเท่านั้นเอง

ที่ว่าเป็น Tile Base System ตั้งแต่ระดับ Hardware ก็คือตัว Hardware จะมีหน่วยความจำพิเศษสำหรับเก็บข้อมูล Tile และหน่วยความจำพิเศษอีกส่วนนึงที่เก็บข้อมูลกราฟิคบนจอ โดยจะเก็บเป็น aray ของ index ของ Tile ดังนั้นเราจะไม่มีทางที่จะวาดภาพบนจอภาพแบบระบุพิกัดเป็น Pixel ได้ นั่นคือที่มาว่าทำไมเกมสมัยก่อนจึงเป็นตารางครับ

กลับมาเข้าเรื่องของเรากัน จากภาพข้างบนเราจะเห็นว่ามีการแสดงผลข้อความที่เขียนว่า “Ta-daaa! It’s fish pot pie made of ‘navaroa’, the phantom fish!” นะครับ ผมคิดว่าคุณอาจจะคิดว่าข้อความนี้เก็บข้อมูลเป็นระหัส ASCII ซึ่งผมยืนยันได้เลยว่า “ไม่ใช่”

ในระบบแบบ Tile-base เนี่ย เราจะมองว่า ช่องไหนใช้ tile index ที่เท่าไหร่ การที่จะต้องเสียพื้นที่เก็บข้อมูลสำหรับ Tile โดยใช้ ASCII Code เนี่ย ไม่ Efficient เพราะว่า ASCII Code มีโค๊ดบางส่วนที่ไม่มีการแสดงผล การที่จะต้องเก็บข้อมูลว่าง ๆ ลงไปใน Tileset นั้นทำให้เสียพื้นที่ที่น้อยนิดไปอย่างฟรี ๆ ดังนั้น Encoding ที่ใช้นั้นจะเป็น Encoding ที่สร้างขึ้นมาใหม่ครับ (ผมเข้าใจว่ามี Tool ที่มาช่วยตรงนี้อยู่แล้ว)

อีกอย่างนึง อยากให้ดูโครงสร้างการเก็บข้อมูลหน้าจอของอุปกรณ์ประเภทนี้ สมมติว่า บัฟเฟอร์การแสดงผลของเรานั้นสามารถแสดงผลได้ 64*64 tile บนหน้าจอ มันจะเก็บข้อมูลแบบนี้ครับ

BYTE dispBuffer[64*64]; // 4096 tile

image

นั่นก็คือ ถ้าเราต้องการจะวาดตัวหนังสือให้อยู่ตรงกลาง เราจำเป็นจะต้องใส่รหัสพิเศษระหว่างตัวอักษรเพื่อจัดตำแหน่งให้ตัวหนังสือมันมาอยู่ตรงกลาง ในตำแหน่งที่เราต้องการด้วย

และสุดท้ายสังเกตตัวอักษรให้ดี ๆ นะครับ

image

สังเกตมั้ยว่าด้านสูงกับด้านกว้างของตัวอักษรไม่เท่ากัน จริง ๆ แล้วในแต่ละตัวอักษรมันเป็นสอง Tile ประกบกันบนล่างครับ

image

วิธีการใช้การประกบบนล่างแบบนี้จริง ๆ ก็มีข้อดีอย่างนึงคือ บาง Tile ก็ประหยัดได้ อย่าง ตัว i กับตัว j เนี่ย มันจะต่างกันแค่ด้านล่างใช่มั้ยครับ ถ้าด้านบนใช้ tile เดียวกัน ก็ประหยัดไปได้ 1 tile (ตัว h กับ n ก็ได้อีกคู่นะ)

และถ้าจะทำจริง ๆ เราสามารถทำให้บางตัวอักษรกว้างสองช่องก็ทำได้ครับ แต่พอดีผมหาตัวอย่างไม่เจอน่ะ

วันนี้พูดแค่ผ่าน ๆ ก็คงพอ เพราะว่าเราคงไม่ได้ใช้ tile-base แท้ ๆ กันสักเท่าไหร่แล้ว คราวต่อไปจะพูดถึงการวาดตัวอักษรแบบที่เป็น raster จริง ๆ แล้วครับ