Anuchit Chalothorn

Human Knowledge Belongs to The World

เปลี่ยนเครื่องมือเขียนหนังสืออีกแล้ว


16 Dec 2024, 16:25

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

จากครั้งที่แล้วใช้ IDE ในเว็บเขียนและ export ไฟล์ออกมาเป็น Markdown แล้วมาแปลงเป็น EPUB แบบ manual ครั้งนี้เขียนเขียนเป็น script สร้างไฟล์ก่อน คิดว่าจะเอาไปใส่ใน GitHub Actions เวลา build ไฟล์จะได้สะดวกมากขึ้น

เครื่องมือสำหรับแปลงไฟล์ใช้ pandoc เหมือนเดิม การแปลงไฟล์ Markdown ไป EPUB ด้วย pandoc เราสามารถใช้ template, css, font ที่เราต้องการได้ ก็เลยทำไฟล์ EPUB ได้สะดวกหน่อย แต่ไฟล์ PDF จะต้องใช้ pdf engine อย่างเช่น LaTex ร่วมด้วย

ผมไม่ได้เขียน LaTex มานานมากและลืมหมดแล้ว ก็เลยใช้ Calibre ช่วยแปลงจาก EPUB เป็น PDF แทน เพราะใส้ใน EPUB เป็น html อยู่แล้ว แปลงไฟล์ได้ง่ายมากกว่า ไฟล์ PDF ที่ได้ออกมาใช้ได้ดีเลย เราสามารถตั้งค่าเพิ่มเติมได้หลายอย่าง เช่น metadata, font, page size, page margin ฯลฯ แต่เรื่องการใส่เลขหน้า ใส่สารบัญ สลับหน้า ฯลฯ ต้องใช้ pdf tools ตัวอื่นมาทำภายหลัง

ผมก็เลยเขียนสคริป python เอา py2pdf, report มาตัดต่อไฟล์ ใส่เลขหน้า ฯลฯ แต่ bookmark ที่สร้างจาก pandoc หายเกลี้ยง 555 สรุปว่ามีงานงอกเพิ่ม เดี๋ยวคงได้หาวิธีที่ดีกว่านี้

ทำ Dart Package เอาไว้เยอะ แต่ลืมว่ามีอะไรบ้าง


10 Dec 2024, 10:20

ทำ Dart Package ไว้เยอะ เพราะไล่ patch เอาไว้ใช้สำหรับโปรเจคที่ทำในตอนนั้น ซึ่งโดยปกติก็จะส่ง patch ไปให้ upstream โดยตรง ไม่ได้ fork มาทำ package ใหม่ ส่วนจะได้ merge เข้า upstream ไหม ผมก็ไม่ได้สนใจไปตามดู จริงๆ ก็ไม่ได้สนใจล่ะ และก็มี Dart Package อีกจำนวนนึง ที่เขียนเอาไว้ใช้เอง publish ใน pub.dev และเอาไป "เล่า" ใน Live ได้

พอมีน้องท่านนึงถามมา ก็นึกไม่ออกเลยเพราะไม่ได้รวมไว้เป็นที่เป็นทาง เท่าที่ได้รวมไว้ ใน uikits template เป็นตัวอย่างแอปที่ live ในแต่ละสัปดาห์ มีบางส่วนที่เป็นเนื้อหาเกี่ยวกับการสร้าง Dart Package ก็จะรวมอยู่ไว้ที่เดียวกัน บางส่วนก็อยู่ใน GitHub แต่ไม่ได้รวมไว้ใน uikits และ pub.dev ก็เลยกลายเป็นว่า "ลืม" เอาเป็นว่าไปตามดูที่ uikits และ pub.dev ละกัน

เพจ Dart แบบ Dart Dart Live ครบ 200 ตอนแล้ว


09 Dec 2024, 10:32

เพจ Dart แบบ Dart Dart Live ครบ 200 ตอนแล้ว ถ้าจะนับกันจริงๆ ก็คงมากกว่า 200 ตอน เพราะมีช่วงนึงที่โดนขโมยแอคเคาท์ไปก็เลยต้องเปิดเพจใหม่ ตอนแรกที่เปิดเพจมาก็คิดว่าจะทำเป็น VLog มาเล่าเรื่อง Dart, Flutter ทุกวันอังคาร ระยะหลังๆ ไม่ค่อยมีงานจ้าง ก็เลยเอางานเก่าๆ คำถามจากลูกเพจ มาทำเป็นกรณีศึกษา และเพิ่มเนื้อหาสอดแทรกเข้าไป เพื่อให้เหมาะกับการเอาไปเล่าในเพจ

นอกจาก Live ทุกวันอังคารแล้วก็คงมีงานหนังสือที่เขียนๆ หยุดๆ พอๆ กัน Course Online เพราะเทคโนโลยีมันขยับไปไวมาก เนื้อหาไม่เท่าไรเพราะเปลี่ยนไม่เยอะมาก มีแต่เพิ่มเนื้อหามากกว่า แต่รูปภาพเนี่ยเปลี่ยนเยอะเลย ก็เลยดองไว้นานมาก คิดว่าน่าจะทะยอยอัพเดทละ

นึกสนุกไปทำ Jaspr UI Component งานงอกเลย


08 Dec 2024, 17:04

ตัดสินใจเขียนหนังสือสูตรลัด Jaspr เพราะคิดว่าโปรเจคนี้แปลกและน่าสนใจดี จนได้ใช้ Jaspr, Tailwind CSS และไปเขียน Component สำหรับ Jaspr มาจำนวนนึง แต่เนื่องจากไม่ได้เขียน Website นานมากแล้ว ก็เลยออกแบบ Component ได้ไม่ดีเท่าไร ตั้งค่าได้น้อยไปนิด แต่ก็ได้ประสบการณ์ที่ดี

Jaspr UI Component ใช้ Tailwind CSS และ DaisyUI ทำให้ขึ้นโครงของ UI Component ได้ง่ายขึ้น แต่ตอนออกแบบไม่ได้ทำเผื่อเรื่องตั้งค่าก็เลยปรับแต่งได้น้อยไปนิดหน่อย ตอนนี้มี Component 50 ตัว ครอบคลุมการใช้งานพื้นฐาน เรียกได้ว่าหยิบเอามาประกอบร่างได้เลย :) หลังจากที่ทำ Jaspr UI Component ไปแล้วก็เลยอัพเดท Website ที่ทำจาก Flutter for Web มาเป็น Jaspr สำหรับ WebApp บางตัวยังคงใช้ Flutter for Web อยู่

เว็บ UIKits Library รวมตัวอย่าง UI และงาน demo บลาๆ


09 Sep 2024, 20:02

มีลูกเพจทักมาบอกว่าอยากให้รวมตัวอย่างแอปใน Live ทุกๆ สัปดาห์ เอาจริงๆ ตัวอย่างมันเยอะมาก Live มา 190 ตอนแล้ว T_T ก็เลยเอาโปรเจค UIKits มาปัดฝุ่นก่อน แล้วทำเว็บ Library แบบกด copy code ในหน้าเว็บได้เลย เอามาใส่ก่อน แล้วค่อยทะยอยเอาตัวอย่างแอปมาขึ้นอีกที ใครสนใจก็กดไปดูกันได้ที่ UIKits Library

Backup ข้อมูลใน Firebase FireStore และเอามาใช้งานกับ Emulators


21 Aug 2024, 22:24

พอดีต้องย้ายข้อมูลจาก Firebase เอามาใช้งาน dev ที่เครื่องตัวเองเพราะว่าติดเรื่อง AppCheck เลยไม่อยากไปตั้งค่า debug บ่อยๆ เพราะเดียวจะลืมเอาออก ก็เลย export ข้อมูลมาทำงานที่เครื่องตัวเองดีกว่า

เครื่องมือที่ต้องใช้ได้แก่ Firebase CLI, gcloud CLI

  1. ล็อกอิน Firebase
firebase login
        
  1. เรียกใช้งาน project ของคุณ
firebase use your-project-name
        
  1. สั่ง export ข้อมูลไปเก็บไว้ใน Cloud Storage
gcloud firestore export gs://your-project-name.appspot.com/<your-choosen-folder-name>
        
  1. สั่ง copy ไฟล์จาก Cloud Storage ลงมาที่เครื่อง
gsutil -m cp -r gs://your-project-name.appspot.com/<your-choosen-folder-name> /path/to/some/folder
        

เข้าไปที่ folder ของคุณ

cd /path/to/some/folder
        

จากนั้นเปลี่ยนชื่อไฟล์ metadata เป็น firestore_export.overall_export_metadata

mv your-choosen-folder-name.overall_export_metadata firestore_export.overall_export_metadata
        

แล้ว copy ไฟล์ที่ได้เอาไปใช้งาน

cp -R * /path/to/workspace/emulator/emulators_data/firestore_export/
        

เรียกใช้ Firebase Emulator ด้วยตำสั่ง

firebase emulators:start --import=./emulators_data/firestore_export --export-on-exit
        

แอปแบบ


03 Apr 2024, 00:38

เมื่อเดือนมีนาไปก่อเรื่องไว้ พอดีก็อยากได้ความเห็นจากชาวโซเชียล เรื่องของการทำแอปแบบ Agoda, Lazada, Shopee บลาๆ ประเด็นคือ มีคนมาให้วิเคราะห์และทำใบเสนอราคาบ่อย คือ ทำใบเสนอราคาแล้วหายไปเลยก็บ่อยมาก บางทีก็เอาเอกสารที่เราวิเคราะห์เอาไปจ้างคนอื่น ทั้งๆ ที่เราเป็นคนวิเคราะห์ขั้นต้นให้

ความเห็นจากชาวโซเชียลก็เละเทะตามคาด หลายคนก็บอกว่าเนี่ยราคาประเมินแบบนี้ไม่พอหรอกเข้าเนื้อแน่นอน บางท่านก็มาคอมเม้นแบบว่าเพื่อนทำอยู่ได้เดือนละ 100,000 ราคานี้ไม่ได้แน่นอน บางท่านก็บอกว่าแค่ database ก็ไม่พอแล้ว ฯลฯ ซึ่งก็เละเทะดี ผมชอบ...

ที่บอกว่าชอบ เพราะจะได้เอาคอมเม้นต่างๆ เหล่านี้ไปให้ ไอ่คนที่ชอบมาให้ทำใบเสนอราคาแอปแบบ ไปไล่อ่านดูว่าไอ่ราคาที่อยากจ่ายน่ะ ชาวโซเชียลยังบอกเลยว่ามันไม่พอเฟ้ย และไอ่ที่คิดราคาให้แต่ละครั้งเนี่ยราคาใกล้เคียงสำหรับเริ่มต้นมากแล้ว

แปะลิงค์ไว้สักหน่อย

ปล. อ.เดฟ มาโพสตอบ ในโพสของชาวโซเชียล(แชร์โพสไป) ซึ่งก็ใช้แนวทางที่ผมประเมินราคาแบบเร็วๆ ล่ะ ลองอ่านดูแล้วจะเข้าใจ

EPUB เราไม่เท่ากัน ภาค 3


24 Mar 2024, 11:05

พยายามทำไฟล์ EPUB มาหลายรอบ เนื่องจากรูปแบบ EPUB บน Google Play Books และบน meb แตกต่างกัน ก็เลยพยายามไฟล์ EPUB ให้อัพโหลดบน Google Play Books ให้ได้ก่อน ปีที่แล้วใช้วิธีการ export ไฟล์ epub จาก Google Docs มาแก้ไขเรื่อง Table of Content ใน Sigil นิดหน่อย แล้วอัพโหลดไปที่ Meb และ Google Play Books ได้ แต่ยังติดปัญหาเรื่องขนาดตัวอักษรและสไตล์อื่นๆ ที่ฝังมากับไฟล์ EPUB ซึ่งก็แน่นอนว่า Tag มันดูยุ่งเยิงไปหมด

ครั้งนี้เลยใช้วิธีการปกติคือ export ไฟล์ docx จาก Google Docs แล้วใช้ Calibre สร้างไฟล์ EPUB ให้ โดยที่สั่ง clear style ที่ไม่จำเป็นออก เช่น font เพราะเราจะใช้ font ที่มีอยู่ในเครื่องหรือแอปในการแสดงผล อาจจะไม่สวยเท่าต้นฉบับ แต่การ render ทำได้ดีกว่าแน่นอน อีกเรื่องคงเป็นขนาดภาพ ระยะ indent ของ bullet list และ ordered list เป็นต้น

จากที่ลองทดสอบสร้างไฟล์ EPUB แล้วลอง Edit ดูพบว่า CSS ที่สร้างออกมาไม่ค่อยคงที่ ขึ้นอยู่กับ style ที่ใช้ในเอกสารด้วย ซึ่งก็ยังไม่มีวิธีแก้แบบอัตโนมัติ แต่ถ้าจะให้เอกสารมันดูสะอาด ก็คงต้องใช้ Markdown แล้วแปลงไปเป็น EPUB จะดีกว่ามาก แต่ครั้งนี้ก็ได้ประสบการณ์ที่ดี อ้อ ยังไม่ได้ลองอัพโหลดไปที่ meb ว่าใช้ได้ไหม แต่ที่แน่ๆ Google Play Books ใช้ได้แล้ว

แก้ Error Ports are not available ใน Windows


23 Feb 2024, 10:57

เจอปัญหาเรื่อง Port ชนใน Docker แต่ไม่ได้มีการเรียกใช้ port นั้นเลยสัก service ก็เลยสงสัย ก็ปรากฎว่ามันไปอยู้ใน reserve port ของ WinNAT ซะงั้น

Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5432 -> 0.0.0.0:0: listen tcp 0.0.0.0:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
        

ให้ดูรายการ port ก่อนว่าถูกจองไว้ไหม

netsh interface ipv4 show excludedportrange protocol=tcp
        

ใช้ terminal สิทธิ์ admin สั่ง stop WinNet ไปก่อน

net stop winnat
        

จากนั้นถอดรายการ port ที่เราจะใช้ออก

netsh int ipv4 add excludedportrange protocol=tcp startport=5432 numberofports=1
        

จากนั้น start service WinNat กลับขึ้นมาคืน

net start winnat
        

แค่นี้ก็เรียบร้อยละ

อัพเดทหนังสือ


23 Feb 2024, 10:57

ผมเขียนหนังสือมาครบ 10 เล่มแล้ว ก็เลยได้โอกาสอัพเดทหนังสือเล่มเก่าด้วย ช่วงนี้ก็เลยไล่ทะยอยอัพเดทหนังสือ ตามลำดับดังนี้

สำหรับคนที่ซื้อหนังสือจาก Meb ก็สามารถอัพเดทหนังสือได้เลย

เขียนหนังสือสูตรลัด Serverpod


10 Feb 2024, 09:57

ช่วงต้นเดือนมกราคมที่ผ่านมา Serverpod ประกาศออกรุ่น 1.2 ก็รู้สึกดีใจที่โปรเจคนี้มันยังไม่เจ๊ง เอ่อ...เจ๊งตอนนี้ก็คงไม่ได้เพราะกวาดเงินนักลงทุนไปหลายราย พอมาดูรายละเอียดที่อัปเดทมาก็ประทับใจ เพราะมีฟีเจอร์ที่ขาดหายไปหลายตัว เช่น migration, websocket, file upload เป็นต้น แต่ด้วยความที่ lead developer ทำงานกับ Zynga และเคยอยู่ในทีม Flutter ที่ Google มาก่อน สไตล์การทำ feature release น่ากลัวมาก คือ ออก feature ใหม่ doc ไม่อัพเดท แล้วก็ไล่ patch ไปเรื่อยๆ แล้วเขียน doc ไล่ตามหลัง ก็เลยต้องชั่งใจว่าจะเขียนหนังสือเล่มนี้ดีมั๊ย สุดท้ายก็เขียนจนได้ เพราะดู roadmap แล้วไม่น่าจะมีอะไร breaking change แล้ว ใครสนใจหนังสือสูตรลัด Serverpod ก็ซื้อกันได้ที่ Meb เหมิอนเดิม

ทำอะไรบ้างในปี 2023


27 Dec 2023, 17:04

ปกติปลายปีก็จะเขียน New Year's resolution และทำ After Action Review ของปีนั้นซึ่งในปีนี้ก็ทำงานน้อยมาก และรายได้ก็น้อยลงเช่นกัน

ปีหน้าทำแผนงานที่ยังไม่ได้ทำจริงจังอีกหลายตัว

หมดงาน


09 Oct 2023, 16:39

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

ปีนี้ทำ checklist ว่าจะต้องทำอะไรบ้างใน 6 เดือนแรก นี่ก็เข้าเดือนที่ 10 แล้ว คงมีแต่เรื่องเอาโปรเจคเก่าๆ มาทำต่อนี่แหละ ส่วนเรื่องคอร์สออนไลน์คงต้องพักสักหน่อย เพราะงานวิดีโอเหนื่อยกว่างานเขียนหนังสือและงานทำต้นแบบ เพราะต้องเตรียมเนื้อหา ตัวอย่าง อัดวิดีโอ ตัดต่อ อีก 3 เดือนสุดท้ายของปีคงตะลุยทำโปรเจตที่โดนเทออกมาขายล่ะ

อัพเดทโครงการ μLearning


26 Jul 2023, 21:37

ตัดสินใจรื้อโครงการ μLearning รอบที่ 3 ซึ่งทำไปทำมาได้เหมือนระบบเหมือนเดิมซะงั้น เอาเป็นว่า μLearning ยังคงแนวคิดเป็นเว็บ eCommerce มากกว่า eLearning ซึ่งก็แน่นอนว่าเอาผลิตภัณฑ์ที่มี มาต่อยอดขายผ่านเว็บ μLearning นั่นเอง ซึ่งมีสินค้าอยู่ 3 กลุ่ม คือ

  1. คอร์สเรียนออนไลน์แบบเรียนผ่านวิดีโอ
  2. หนังสือซึ่งปกติก็จำน่ายผ่าน
  3. โปรเจคสำเร็จรูปพร้อมใช้งาน

วางแผนเรื่องนี้มาหลายเดือนซึ่งคอนแรกจะเอาไปขึ้นขายที่ Envato แต่ก็ยังไม่ได้เอาไปขายสักที ก็เลยตัดสินใจทำเว็บ eCommerce ขายเองละกัน ก็เลยมาเป็น μLearning นี่แหละ สำหรับใครที่อยากลงทะเบียนเรียนก็ กดลิงค์ https://learn.redlinesoft.net ได้เลย

ใช้ Prisma Dart บน Docker


10 Jul 2023, 21:16

ตัดสินใจเขียนหนังสือ Dart Frog เพราะเห็นว่าเครื่องมือมันเจ๋งดี คิดว่าจะเอามาใช้งานร่วมกับ Prisma ก็เลยเขียนหนังสือไปด้วย ได้ทดลองอะไรใหม่ๆ ไปด้วย สิ่งที่น่าสนใจของ Dart Frog คือความยืดหยุ่น โดยเฉพาะเรื่อง route นี่เท่ห์มาก ทำ dynamic route จากชื่อไฟล์ได้ด้วย

ปัญหาที่เจอถัดมาคือการ build ซึ่ง build ออกมาได้สวยงามมาก มี Dockerfile ออกมาพร้อมเลย แต่ว่าถ้าเอาไปใช้งานจริง เช่น ใช้งานกับ Prisma จำเป็นต้อง generate code จาก Prisma ก่อน อีกเรื่องคือ prisma query-engine-debian-openssl-1.1 ก็เลยทำให้ได้ เขียน Dockerfile ใหม่ยกแผง ทั้ง Dockerfile และ Docker compose ด้วย แต่โดยไอเดียของการ Deploy บน Cloud Run และ App Platform ทำได้ดีมากเลย แต่ก็นั่นแหละถ้าต้องเชื่อมต่อกับระบบฐานข้อมูลด้วย Prisma ก็งานงอกเหมือนเดิม

Prisma เราไม่เท่ากัน


06 Jul 2023, 12:41

มีน้องแนะนำ Prisma ได้ลองเล่นบน Next.js แล้วชอบมาก พอมีคน port ไป Dart ก็รู้สึกตื่นเต้น เพราะใช้คำสั่งจาก prisma cli ได้ สร้าง schema ทำ migration ได้ และใช้ prisma studio ได้เหมือนเดิม ก็ Prisma แหละ แต่ที่เพิ่มเติมคือ ตอน build client จากเพิ่มที่เป็น JS ก็กลายมาเป็น Dart ORM แทน สั่ง generate client มาใช้งานได้เลย เรียกได้ว่าสุดประทับใจ

แต่... มันไม่เหมือน Prisma บน Next.js ซะทีเดียว ก็เลยใช้ feature อย่างเช่น select, include ไม่ได้ ซึ่งก็น่าเสียดายมากๆ แต่ถ้าถามว่าชอบไหม ก็ชอบล่ะ แต่การเอาไปใช้จริงจังอาจจะต้องเขียนเพิ่มเติมอีกเยอะ เช่น select และ include เป็นต้น

Dart ฝั่ง Server มีโปรเจคไหนน่าเล่นบ้าง


03 Jul 2023, 12:19

ช่วงนี้ได้เล่น Dart ฝั่ง Server มาหลายตัว ตั้งแต่ช่วงปลายปี 2018 เป็นต้นมาที่มีนักพัฒนาซอฟต์แวร์โอเพ่นซอร์สหลายคนทำโปรเจคออกมาเยอะ ทั้งไปรอดและไปไม่รอด ก็เลยมารวบรวมไว้สักหน่อย

  1. Aqueduct
  2. Jaguar
  3. Angel Framework
  4. Get Server
  5. Shelf
  6. Serverpod
  7. Dart Frog

โดยส่วนตัวยังชอบ Angel, Get Server อยู่ ส่วน Dart Frog กำลังเล่นและทดลองใน use case ต่างๆ อยู่

EPUB เราไม่เหมือนกัน


24 May 2023, 11:47

หลังจากพยายามสร้างไฟล์ EPUB จากหลากหลายวิธี ก็ทำสำเร็จ อัพโหลดไปได้ทั้ง Google Play Books และ Meb ผมก็พยายามใส่ font เข้าไปด้วยจะได้เอาฟอนต์มาใช้ได้เลย กลายเป็นว่า Meb ไม่ render font ที่ใส่เข้าไปซะงั้น แถมยัง render ข้อความออกมาไม่ค่อยจะสวยเท่าไร แต่ใน Google Play Books ออกมาสวยงามมว๊าก

เอาเป็นว่าทำสำเร็จครึ่งนึงละกัน ไว้คราวหน้าพยายามใหม่ สำหรับ Meb ก็คงต้องแก้ไขเรื่องการจัดหน้าใหม่และอาจจะให้ Meb ทำไฟล์ EPUB ให้จริงๆ ล่ะ

ยังคาใจเรื่อง EPUB อยู่


22 May 2023, 10:02

ผมใช้ Google Docs เป็นหลักในการเขียนหนังสือและทำเอกสารต่างๆ ล่าสุดก็ยอมติดตั้ง WPS Office เพื่อใช้อ่านไฟล์ docx และ xlsx แต่ก็ยังไม่ย้ายไปใช้ WPS Office นะ เพราะชีวิตยังอยู่บน online มากกว่า offline ขนาดเขียน blog ยังเขียนใน GitHub เลย T_T

ล่าสุดก็พยายามหาข้อมูลเรื่องการจัดหน้าหนังสือก็ไปเจอ YouTube Channel ของน้องโม Sensei Gokko หรือ โมณฌา ก็เลยได้ความรู้ด้านการทำหนังสือ ebook แบบจริงๆ น้องเป็นนักเขียนของสำนักพิมพ์แจ่มใส มีผลงานหลายเล่มการันตีได้เลยว่า "เมพ" จริง หลังจากดูวิธีการกับเทคนิดการจัดหน้าหนังสือก็ปรับเอามาใช้กับ Google Docs ได้เลย เพราะวิธีการตั้งค่าไม่แตกต่างกันมาก

เรื่อง EPUB เป็นเรื่องที่คาใจมาก เพราะผมยังทำไฟล์อัพโหลดไป Google Play Books กับ meb ไม่ได้ มี error เหมือนกับ format ของ EPUB ไม่ตรงเวอร์ชั่น ผมไม่แน่ใจว่า meb ใช้ EPUB2 หรือ EPUB3 แต่เท่าที่ลอง พังทั้งคู่ T_T จากที่ดูวิธีการของน้องโม ก็สรุปได้ว่า "ให้ meb ทำให้" และ ทำ "ไฟล์ตัวอย่างหนังสือ" แยกจากไฟล์หนังสือ อาจจะดูหลายขั้นตอน แต่ก็ขึ้นอยู่กับรูปแบบและเนื้อหาของหนังสือด้วย

สำหรับผมที่ลอง epub กับ Google Play Books ก็พบว่าไม่สามารถแยกไฟล์ออกเป็นบทๆ ได้ เจอ error ยาวเหยียดเรื่อง link ไฟล์ xhtml ก็เลยใช้ Google Docs export ออกมาเป็น epub แล้วไปแก้ไข Metadata + Bookcover ใน Sigil แทน หรือจะใช้ Calibre ก็ได้ แต่อย่าสั่ง flatten ไฟล์ ก็สามารถอัพโหลดหนังสือแบบ epub ขึ้น Google Play Books ได้แบบปกติ

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

สร้างไฟล์ EPUB จาก Google Docs


07 May 2023, 10:02

ผมใช้ Google Docs เขียนหนังสือเพราะมันสะดวกมาก ใช้ tablet หรือ notebook ก็สามารถเขียนหนังสือได้ที่สำคัญคือใช้งานแบบออฟไลน์ได้ด้วย และ export ไฟล์ได้หลายรูปแบบมี EPUB ด้วย จากที่พยายาม export ไฟล์แบบ EPUB มาหลายครั้ง พบว่ามีปัญหาเรื่องรูปแบบเอกสารที่ไม่ตรงกับ style ที่ตั้งค่าไว้ เอกสารก็เลยดูเละ อีกเรื่องก็เป็นเรื่อง cover และ metadata ของไฟล์ EPUB มันตั้งค่ายากมาก และ Google Docs ไม่รองรับซะด้วย

ผมก็เลยพยายามทำไฟล์ EPUB อีกรอบ อยากสร้างไฟล์ EPUB ได้เอง จะได้ไม่ต้องให้ทาง platform ทำให้ ซึ่ง meb มีบริการสร้างไฟล์ EPUB ด้วยนะ หลังจากค้นหาวิธีสร้างไฟล์ EPUB ก็ได้เจอเครื่องมือแบบออนไลน์หลายตัว เช่น designrr และ fiverr ดูน่าสนใจมาก แต่ก็ไม่ได้ลองใช้งาน

สุดท้ายก็เลยได้ใช้เครื่องมืออย่าง Sigil ใช่เลย เครื่องมือโบราณที่ใช้สร้างไฟล์ EPUB นี่แหละ วิธีการคือ export ไฟล์ Google Docs มาเป็น EPUB แล้วใช้ sigil แก้ไข style sheet ในไฟล์ EPUB เพิ่ม cover เพิ่ม metadata ของหนังสือใน sigil ได้เลย อ้อที่สำคัญที่สุดคือ ไฟล์ต้นฉบับใน Google Docs ไม่ต้องจัดหน้าสวยงาม ใส่แค่ style sheet เพื่อเรียงลำดับหัวข้อเอาไว้ก็พอ เพราะยังไงก็ต้องมาแก้ไขไฟล์ใน sigil กรณีที่หัวข้อมันกระโดดอยู่แล้ว

ตอนนี้ก็ได้วิธีสร้างไฟล์ EPUB แล้ว หนังสือเล่มต่อไปคงทำเป็น EPUB ก่อน แล้วค่อยไปจัดหน้ากระดาษใหม่อีกรอบแล้วทำเป็นไฟล์ pdf ได้ประสบการณ์ใหม่จากการเขียนหนังสือเพิ่มอีก

เขียน Blog สั่ง Auto Update ผ่าน GitHub Actions


04 May 2023, 12:00

หลังจากพยายามเขียน Blog ด้วย Flutter for Web มาสักพัก ก็พอจะเข้าใจล่ะว่า Flutter for Web มันไม่ค่อยเหมาะกับ Web Content โดยเฉพาะ Blog นี้ตรงตัวเลย คือ ไม่เหมาะอย่างมาก หลายคนมักจะพูดเรื่อง SEO บลาๆ ซึ่งผมเองก็ใช้ WordPress มาตลอดเลยนึกไม่ค่อยออกเท่าไร WordPress มันทำให้หมดก็เลยไม่มีความรู้ด้านนี้เท่าไร แต่ก็นั่นแหละ โจทย์คือ ไม่ต่ออายุ Hosting และเขียน Web แบบครึ่งๆ กลางๆ โดยใช้ Flutter for Web และ Firebase Hosting นี่จะทำยังไง

ได้ไอเดียมาจาก Jekyll และ Hugo มา ก็เลยเขียน Markdown และข้อมูลของหน้า แยกเป็นไฟล์ย่อยๆ แล้วให้ CI สั่ง generate ไฟล์ที่จำเป็นออกมา เช่น sitemap.xml, rss.xml, markdown content ที่เป็น markdown ล้วนๆ ตอนแสดงผลก็เรียกไฟล์ออกมาแสดงผล เป็นเว็บแบบ SPA (Single Page Applications) ซึ่งก็น่าจะพอถูไถไปได้ แต่อย่าเพิ่งพูดถึง SEO หรือแบ่งเป็นหน้าๆ เพราะตอนนี้ เอาแค่หน้าเดียวก่อนละกัน

ประเด็นเรื่อง Flutter for Web นี้มีหลายเรื่องต้องคิด ทั้ง State ของหน้า ทั้ง Routing ของหน้า จำได้ว่าทำ Web Microlearning ใช้ Flutter for Web นี่ต้องคิดหลายมุม แต่ก็ได้ best practice มาในเรื่อง State Management ก็เป็นเรื่องที่แปลกใหม่ดี

เล่ายาวไปไกล กลับมาเรื่อง Blog ที่เขียน ก็นั่นแหละถ้า CI/CD อยู่บน Github ก็ใช้ Github Actions สั่งสร้างไฟล์ต่างๆ และ build Flutter Web application พร้อม deploy ไปยัง Firebase Hosting ซึ่งดูง่ายมากๆ คิดว่าน่าจะต้องทำแบ่งหน้า ไม่ก็สั่ง generate จาก HTML template น่าจะดี ... เขียนไปเขียนมา กลายเป็น Hugo เวอร์ชั่น Dart ซะงั้น ^o^

เขียนหนังสือ


04 May 2023, 12:00

ปีที่แล้วตั้งใจเขียนหนังสือ 3 เล่ม ก็เร่งปั่นต้นฉบับออกมาให้ทันตามความตั้งใจ สำหรับปีนี้จะเขียนเพิ่มอีก 4 เล่ม รวม 7 เล่ม ซึ่งก็ใกล้ครบแล้ว หนังสือที่วางจำหน่ายแล้ว มีดังนี้

  1. สูตรลัด Flutter
  2. สูตรลัด GetX
  3. สูตรลัด FlutterFire
  4. สูตรลัด Hasura
  5. คู่มือประกอบการเรียน Flutter Crash Course
  6. Material Design 3

เหลือเล่มที่ยังเขียนไม่เสร็จอยู่ 3 เล่ม

  1. สูตรลัด Strapi
  2. Flutter Plugin ที่น่าใช้งาน
  3. สูตรลัด Dart 3

คิดว่าจะเขียนหนังสือสูตรลัด Dart 3 ให้เสร็จก่อน Dart 3 ตัวเต็มจะออก แต่ไอ่หนังสือ Fundamental นี่เขียนยากจริงๆ :D

ทดสอบ Blog ใหม่


04 May 2023, 12:00

เนื่องจากไม่ได้ต่ออายุ Hosting เลยพยายามหาวิธีเขียน Blog แบบรวดเร็ว ตอนแรกก็คิดว่าจะ redirect ไปที่ Medium แต่คิดไปคิดมา อยากทดลองอะไรใหม่ๆ ก็เลยลองทำ static blog จาก Flutter for Web ดู blog อาจจะดูแห้งๆ แต่ก็คิดว่าน่าจะลองทำดู ถ้าไม่รอดก็คงไปใช้ Medium เหมือนเดิม สิ่งที่พยายามทำคือ พยายามไม่ทำอะไรเยอะ เช่น ไม่อยากทำ backend ทั้ง server ทั้ง web backend, ไม่อยากลง Wordpress, อยากได้ blog สไตล์ Ghost แต่ก็ไม่อยากลง ghost cli เป็นต้น ก็นั่นแหละ ก็เลยตัดสินใจไม่ต่ออายุ Hosting และย้ายมาใช้ Firebase + Flutter for Web แทน

แล้วไอ่ blog ที่อยากได้แบบมีเงื่อนไขเยอะแยะนี่คืออะไร ประเด็นก็คืออยากย้ายทุกอย่างเป็นออนไลน์ แบบกึ่ง static web กึ่งออนไลน์ กึ่งออฟไลน์ เก็บข้อมูลลงใน GitHub และใช้ GitHub Actions build web ออกมาให้ เอาล่ะ ยังไงก็ต้องลองดู ถ้าเบื่อแล้วก็คงย้ายไป Meduim เหมือนเดิมละมั๊ง หรือไม่ก็ไม่เขียน blog ไปอีกสักพัก

กลับมาเขียนหนังสือ


10 Sep 2022, 12:00

เคยเขียนหนังสือ PHP, MySQL ตอนปี 3 ป.ตรี ตอนนั้นจะเอาไปพิมพ์ที่สำนักพิมพ์ Witty Group แต่ต้นฉบับเขียนเสร็จช้ากว่านักเขียนอีกท่านนึงก็เลยไม่ได้ตีพิมพ์ T_T จากนั้นก็เลยไม่ได้เขียนอะไรออกมาจริงจัง มีเขียน blog บ้าง จนมาทำงานที่ SIPA รับหน้าที่พัฒนาระบบปฏิบัติการ Suriyan Desktop และ Chantra OpenSource Software for Windows และดูแลเครื่อง Server ของโครงการทั้ง Suriyan, Chantra และเว็บ thaiopensource.org

ก็เลยมีเรื่องให้เขียน blog เรื่อยๆ ซึ่งส่วนใหญ่จะเป็นข่าวในแวดวง Open Source และงานพัฒนา Software ที่ทำอยู่ในรูปแบบ tutorial หลังจากมาทำงานที่ depa ก็ไม่ได้ดูแล thaiopensource.org อีกเลย งานเขียนส่วนใหญ่ก็ไม่ได้ทำ ทำแต่เอกสารการประชุม ตอนนี้ออกจาก depa มาครบ 3 ปีแล้ว ก็รับงานจ้างไปเรื่อยๆ

ช่วงนี้ว่างงาน ไม่มีงานจ้างพัฒนาซอฟต์แวร์ ก็เลยคิดว่าน่าจะหาอะไรทำหารายได้ ถ้ารองานคงไม่ได้ง่ายๆ ซึ่งส่วนใหญ่จะไม่จ้าง T_T ก็เลยได้ลองอะไรใหม่ๆ เช่น Live ในเพจ Dart แบบ Dart Dart และ กลับมาเขียนหนังสืออีกครั้ง ครั้งนี้ไม่ได้เขียนกับสำนักพิมพ์แล้วเพราะคงไม่ได้ตีพิมพ์อีกแน่นอน อีกอย่างกระแสการอ่านผ่าน ebook จาก app ในมือถือ และ tablet สะดวกกว่ามาก ก็เลยเขียนหนังสือขายลง platform ต่างๆ น่าจะดีกว่า

เขียนหนังสืออะไรดี นั่นสิ ปกติก็เขียน tutorial มาตลอด พยายามเขียนในรูปแบบเนื้อหา ก็รู้สึกอึดอัด ไม่สนุกและเขียนไม่ออก ก็เลยกลับมาเขียนเชิง tutorial เหมือนเดิม และเพิ่มความเสียดสีเข้าไปนิดหน่อย คือ ถ้าไม่ชอบอ่านก็ก๊อปโค้ดวางละกัน ก็เลยกลายเป็น “หนังสือชุดสูตรลัดก๊อปวาง” โดยเริ่มจากหนังสือ

  1. สูตรลัด Flutter – เขียน Flutter ง่ายๆ จากโค้ดตัวอย่าง
  2. สูตรลัด GetX – ใช้งาน GetX อย่างเข้าใจและประยุกต์ใช้งานได้จริง
  3. สูตรลัด FlutterFire – เขียน Flutter กับ Firebase ได้อย่างเซียน
  4. สูตรลัด Angel Framework

เล่ม 3-4 ทะยอยเขียนเรื่อยๆ ปล. งานสอนออนไลน์ Flutter Crash Course ยังรับสมัครอยู่เรื่อยๆ กำลังเปิด Season 3 เป็นเรียนผ่าน Video