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 สรุปว่ามีงานงอกเพิ่ม เดี๋ยวคงได้หาวิธีที่ดีกว่านี้
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 ละกัน
09 Dec 2024, 10:32
เพจ Dart แบบ Dart Dart Live ครบ 200 ตอนแล้ว ถ้าจะนับกันจริงๆ ก็คงมากกว่า 200 ตอน เพราะมีช่วงนึงที่โดนขโมยแอคเคาท์ไปก็เลยต้องเปิดเพจใหม่ ตอนแรกที่เปิดเพจมาก็คิดว่าจะทำเป็น VLog มาเล่าเรื่อง Dart, Flutter ทุกวันอังคาร ระยะหลังๆ ไม่ค่อยมีงานจ้าง ก็เลยเอางานเก่าๆ คำถามจากลูกเพจ มาทำเป็นกรณีศึกษา และเพิ่มเนื้อหาสอดแทรกเข้าไป เพื่อให้เหมาะกับการเอาไปเล่าในเพจ
นอกจาก Live ทุกวันอังคารแล้วก็คงมีงานหนังสือที่เขียนๆ หยุดๆ พอๆ กัน Course Online เพราะเทคโนโลยีมันขยับไปไวมาก เนื้อหาไม่เท่าไรเพราะเปลี่ยนไม่เยอะมาก มีแต่เพิ่มเนื้อหามากกว่า แต่รูปภาพเนี่ยเปลี่ยนเยอะเลย ก็เลยดองไว้นานมาก คิดว่าน่าจะทะยอยอัพเดทละ
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 อยู่
09 Sep 2024, 20:02
มีลูกเพจทักมาบอกว่าอยากให้รวมตัวอย่างแอปใน Live ทุกๆ สัปดาห์ เอาจริงๆ ตัวอย่างมันเยอะมาก Live มา 190 ตอนแล้ว T_T ก็เลยเอาโปรเจค UIKits มาปัดฝุ่นก่อน แล้วทำเว็บ Library แบบกด copy code ในหน้าเว็บได้เลย เอามาใส่ก่อน แล้วค่อยทะยอยเอาตัวอย่างแอปมาขึ้นอีกที ใครสนใจก็กดไปดูกันได้ที่ UIKits Library
21 Aug 2024, 22:24
พอดีต้องย้ายข้อมูลจาก Firebase เอามาใช้งาน dev ที่เครื่องตัวเองเพราะว่าติดเรื่อง AppCheck เลยไม่อยากไปตั้งค่า debug บ่อยๆ เพราะเดียวจะลืมเอาออก ก็เลย export ข้อมูลมาทำงานที่เครื่องตัวเองดีกว่า
เครื่องมือที่ต้องใช้ได้แก่ Firebase CLI, gcloud CLI
firebase login
firebase use your-project-name
gcloud firestore export gs://your-project-name.appspot.com/<your-choosen-folder-name>
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 ก็ไม่พอแล้ว ฯลฯ ซึ่งก็เละเทะดี ผมชอบ...
ที่บอกว่าชอบ เพราะจะได้เอาคอมเม้นต่างๆ เหล่านี้ไปให้ ไอ่คนที่ชอบมาให้ทำใบเสนอราคาแอปแบบ ไปไล่อ่านดูว่าไอ่ราคาที่อยากจ่ายน่ะ ชาวโซเชียลยังบอกเลยว่ามันไม่พอเฟ้ย และไอ่ที่คิดราคาให้แต่ละครั้งเนี่ยราคาใกล้เคียงสำหรับเริ่มต้นมากแล้ว
แปะลิงค์ไว้สักหน่อย
ปล. อ.เดฟ มาโพสตอบ ในโพสของชาวโซเชียล(แชร์โพสไป) ซึ่งก็ใช้แนวทางที่ผมประเมินราคาแบบเร็วๆ ล่ะ ลองอ่านดูแล้วจะเข้าใจ
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 ใช้ได้แล้ว
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 ก็สามารถอัพเดทหนังสือได้เลย
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 เหมิอนเดิม
27 Dec 2023, 17:04
ปกติปลายปีก็จะเขียน New Year's resolution และทำ After Action Review ของปีนั้นซึ่งในปีนี้ก็ทำงานน้อยมาก และรายได้ก็น้อยลงเช่นกัน
ปีหน้าทำแผนงานที่ยังไม่ได้ทำจริงจังอีกหลายตัว
09 Oct 2023, 16:39
หมดสัญญาจ้างจัดทำรายากรวิทยุซึ่งก็ไม่รู้ว่าจะมีอีกไหม ก็เลยคิดว่าน่าจะได้เวลาเอาโปรเจคที่โดนเทเอามาทำขายบ้างน่าจะดี ซึ่งบางโปรเจคได้เริ่มงานออกแบบไปบางส่วนแล้ว บางโปรเจคก็โดนเทตั้งแต่ส่งใบเสนอราคา แต่ก็ไม่เป็นไรเดินหน้าต่อไป โปรเจคไหนขายได้ก็ทำขาย อันไหนขายไม่ได้อย่างน้อย งานออกแบบก็ขายได้
ปีนี้ทำ checklist ว่าจะต้องทำอะไรบ้างใน 6 เดือนแรก นี่ก็เข้าเดือนที่ 10 แล้ว คงมีแต่เรื่องเอาโปรเจคเก่าๆ มาทำต่อนี่แหละ ส่วนเรื่องคอร์สออนไลน์คงต้องพักสักหน่อย เพราะงานวิดีโอเหนื่อยกว่างานเขียนหนังสือและงานทำต้นแบบ เพราะต้องเตรียมเนื้อหา ตัวอย่าง อัดวิดีโอ ตัดต่อ อีก 3 เดือนสุดท้ายของปีคงตะลุยทำโปรเจตที่โดนเทออกมาขายล่ะ
26 Jul 2023, 21:37
ตัดสินใจรื้อโครงการ μLearning รอบที่ 3 ซึ่งทำไปทำมาได้เหมือนระบบเหมือนเดิมซะงั้น เอาเป็นว่า μLearning ยังคงแนวคิดเป็นเว็บ eCommerce มากกว่า eLearning ซึ่งก็แน่นอนว่าเอาผลิตภัณฑ์ที่มี มาต่อยอดขายผ่านเว็บ μLearning นั่นเอง ซึ่งมีสินค้าอยู่ 3 กลุ่ม คือ
วางแผนเรื่องนี้มาหลายเดือนซึ่งคอนแรกจะเอาไปขึ้นขายที่ Envato แต่ก็ยังไม่ได้เอาไปขายสักที ก็เลยตัดสินใจทำเว็บ eCommerce ขายเองละกัน ก็เลยมาเป็น μLearning นี่แหละ สำหรับใครที่อยากลงทะเบียนเรียนก็ กดลิงค์ https://learn.redlinesoft.net ได้เลย
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 ก็งานงอกเหมือนเดิม
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 เป็นต้น
03 Jul 2023, 12:19
ช่วงนี้ได้เล่น Dart ฝั่ง Server มาหลายตัว ตั้งแต่ช่วงปลายปี 2018 เป็นต้นมาที่มีนักพัฒนาซอฟต์แวร์โอเพ่นซอร์สหลายคนทำโปรเจคออกมาเยอะ ทั้งไปรอดและไปไม่รอด ก็เลยมารวบรวมไว้สักหน่อย
โดยส่วนตัวยังชอบ Angel, Get Server อยู่ ส่วน Dart Frog กำลังเล่นและทดลองใน use case ต่างๆ อยู่
24 May 2023, 11:47
หลังจากพยายามสร้างไฟล์ EPUB จากหลากหลายวิธี ก็ทำสำเร็จ อัพโหลดไปได้ทั้ง Google Play Books และ Meb ผมก็พยายามใส่ font เข้าไปด้วยจะได้เอาฟอนต์มาใช้ได้เลย กลายเป็นว่า Meb ไม่ render font ที่ใส่เข้าไปซะงั้น แถมยัง render ข้อความออกมาไม่ค่อยจะสวยเท่าไร แต่ใน Google Play Books ออกมาสวยงามมว๊าก
เอาเป็นว่าทำสำเร็จครึ่งนึงละกัน ไว้คราวหน้าพยายามใหม่ สำหรับ Meb ก็คงต้องแก้ไขเรื่องการจัดหน้าใหม่และอาจจะให้ Meb ทำไฟล์ 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 ก็แนะนำให้ไปติดตามน้องโมกันได้
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 ได้ประสบการณ์ใหม่จากการเขียนหนังสือเพิ่มอีก
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 เล่ม ซึ่งก็ใกล้ครบแล้ว หนังสือที่วางจำหน่ายแล้ว มีดังนี้
เหลือเล่มที่ยังเขียนไม่เสร็จอยู่ 3 เล่ม
คิดว่าจะเขียนหนังสือสูตรลัด Dart 3 ให้เสร็จก่อน Dart 3 ตัวเต็มจะออก แต่ไอ่หนังสือ Fundamental นี่เขียนยากจริงๆ :D
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 เหมือนเดิม และเพิ่มความเสียดสีเข้าไปนิดหน่อย คือ ถ้าไม่ชอบอ่านก็ก๊อปโค้ดวางละกัน ก็เลยกลายเป็น “หนังสือชุดสูตรลัดก๊อปวาง” โดยเริ่มจากหนังสือ
เล่ม 3-4 ทะยอยเขียนเรื่อยๆ ปล. งานสอนออนไลน์ Flutter Crash Course ยังรับสมัครอยู่เรื่อยๆ กำลังเปิด Season 3 เป็นเรียนผ่าน Video