1 คะแนน โดย GN⁺ 2024-03-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมื่อค้นหาแล้วก็ยังอ่านบทสนทนาเก่า ๆ ย้อนกลับได้ยาก จึงแปลงบทสนทนา iMessage ที่ยาวที่สุดให้เป็น หนังสือจริง เพื่อให้เปิดไล่ดูตามวันที่ได้
  • เปิด sms.db จากแบ็กอัป iPhone ด้วย SQLite เพื่อดึงข้อความออกมา แต่เนื้อหาบางส่วนไม่ได้อยู่ใน message.text แต่อยู่ใน binary blob ของ message.attributedBody จึงต้องมีขั้นตอนประมวลผลเพิ่มเติม
  • แทนที่จะเขียน parser เอง ได้ใช้ crate imessage-database ของ Rust เพื่ออ่านฐานข้อมูล iMessage เป็นข้อมูลแบบมีโครงสร้าง และปรับ SQL ให้ดึงมาเฉพาะบทสนทนาเดียว
  • เนื้อหาในหนังสือสร้างด้วย LaTeX และเพื่อแก้ปัญหาการเรนเดอร์อีโมจิกับต้นทุนการพิมพ์ จึงใช้ XeLaTeX และฟอนต์ขาวดำ Google Noto Emoji
  • ข้อความตลอด 3 ปีมีความยาวราว 1,300 หน้าในขนาด 6" x 9" จึงถูกแบ่งเป็น 3 เล่ม และพิมพ์ผ่าน Barnes & Noble Press ได้ในราคา 30 ดอลลาร์ รวมค่าส่ง

ทำไมถึงทำ iMessage ให้เป็นหนังสือ

  • เวลานึกย้อนถึงเหตุการณ์เฉพาะในอดีต บันทึกข้อความมักเป็นเบาะแสสำคัญ
  • แม้ว่าการค้นหาประวัติ iMessage ทั้งหมดบน iPhone จะเร็วขึ้นแล้ว แต่ถ้าจะใช้งานให้ได้ผล ก็ยังต้องจำ บางส่วนของถ้อยคำที่แน่นอน ในข้อความที่หาอยู่
  • เมื่อกดจากผลการค้นหาเข้าไปดูบทสนทนาเก่าเพื่อดูบริบทรอบข้าง การโหลดแบบเลื่อนหน้าจอช้ามาก
  • เพราะไม่มีฟังก์ชันให้กระโดดไปยังวันที่ที่ต้องการได้ทันที จึงตัดสินใจสร้าง ประสบการณ์แบบเปิดพลิกเหมือนหนังสือ จากบทสนทนาด้วยตัวเอง

ดึงข้อความออกจากแบ็กอัป iPhone

  • หากจะนำข้อความไปประมวลผล ก่อนอื่นต้องดึงข้อมูลออกมาจาก iPhone ให้ได้
  • ตามข้อมูลใน iPhone Wiki ถ้านำ sms.db ออกจากแบ็กอัป iPhone มาได้ ก็จะสามารถจัดการข้อความผ่านฐานข้อมูล SQLite ได้
  • หลังจากสร้างแบ็กอัปมาตรฐานด้วย Finder บน Mac แล้วเปิดโฟลเดอร์แบ็กอัป จะพบไดเรกทอรีที่ชื่อเป็นไบต์เลขฐานสิบหกอยู่ที่ระดับราก
  • ชื่อไฟล์ sms.db ตามที่ iPhone Wiki ระบุคือ 3d0d7e5fb2ce288813306e4d4636395e047a3d28 และสามารถคัดลอกออกมาเป็น imessage.db แล้วเปิดด้วย CLI ของ sqlite3 ได้
  • ใน DB มีตารางอย่าง message, attachment, chat, handle, chat_message_join

ปัญหาในการ query ด้วย SQL และการดึงเนื้อหาข้อความ

  • หากต้องการดึงบทสนทนาจริงออกมา จำเป็นต้อง join ตาราง message, chat_message_join, chat
  • เมื่อ query ข้อความตามลำดับวันที่โดยอิง chat_identifier ของแชตที่ต้องการ พบว่าข้อความบางรายการไม่มีเนื้อหา
  • ข้อความบางส่วนที่ดูเหมือนว่างนั้น ไม่ได้เก็บไว้ใน message.text แต่เก็บเป็น NSMutableAttributedString แบบเข้ารหัสอยู่ในคอลัมน์ binary blob ของ message.attributedBody
  • เมื่อนำข้อมูลไบนารีออกจาก sqlite3 เป็น hex แล้วตรวจด้วย xxd ก็เห็นได้ว่ามีเนื้อหาตัวอักษรจริงอยู่ภายใน
  • แทนที่จะลงมือเขียน parser สำหรับฟอร์แมตไบนารีนี้เอง จึงใช้ crate imessage-database
    • crate นี้สามารถอ่านฐานข้อมูล iMessage แล้วแปลงออกมาเป็นโครงสร้างข้อมูลของ Rust
    • ไบนารี imessage-exporter ที่มาพร้อมกันสามารถสร้างบทสนทนาออกมาเป็นข้อความหรือ HTML ได้
    • มีการปรับแต่งคำสั่ง SQL ของไลบรารีเล็กน้อย เพื่อให้ดึงมาเฉพาะบทสนทนาเดียว

สร้างเนื้อหาหนังสือด้วย LaTeX

  • เป้าหมายไม่ใช่ HTML หรือไฟล์ข้อความ แต่เป็น หนังสือจริง ที่ถือและเปิดอ่านได้ จึงเลือกให้ผลลัพธ์เป็น LaTeX
  • ซอร์สแบบข้อความของ LaTeX เหมาะกับเทมเพลตและการสร้างอัตโนมัติ จึงใช้วิธีส่งออกแต่ละข้อความให้เป็นโค้ด LaTeX
  • การเรนเดอร์ช่วงแรกเริ่มจากรูปแบบง่าย ๆ
    • ข้อความที่ส่งเองจัดชิดซ้าย ข้อความของอีกฝ่ายจัดชิดขวา
    • ตำแหน่งที่มีรูปภาพจะใส่ข้อความระบุว่าเป็นไฟล์แนบ
    • องค์ประกอบที่เรนเดอร์ยุ่งยาก เช่น reaction และ reply ถูกข้ามไป
    • แบ่ง chapter ตามวันที่และปรับหน้าตาเล็กน้อย

การจัดการอีโมจิและ XeLaTeX

  • LaTeX แบบปกติไม่รองรับ unicode ดังนั้นเมื่อเรนเดอร์จนถึงช่วงที่มีอีโมจิ คอมไพเลอร์จะล้มเหลว
  • แม้จะสามารถลบอีโมจิออกได้ แต่เห็นว่าอีโมจิมีความสำคัญต่อการสื่อสารยุคใหม่ จึงไม่ตัดทิ้ง
  • จึงเปลี่ยนไปใช้ XeLaTeX เพื่อใช้ความสามารถด้านฟอนต์ unicode
  • ในซอร์ส LaTeX ที่สร้างขึ้น จะครอบอีโมจิแต่ละตัวให้อยู่ในรูป {\\emojifont X} และกำหนด \\emojifont ให้เป็นฟอนต์อีโมจิ ทำให้เรนเดอร์อีโมจิ inline ได้สำเร็จ
  • เพื่อหลีกเลี่ยงต้นทุนการพิมพ์สี จึงใช้ฟอนต์อีโมจิ ขาวดำ Noto Emoji ของ Google
  • ใส่คำสั่ง LaTeX \\markright ในแต่ละข้อความ เพื่อให้ส่วนหัวแสดงวันที่ปัจจุบันตามเนื้อหา

แบ่ง 1,300 หน้าออกเป็น 3 เล่ม

  • เมื่อคอมไพล์ข้อความ 3 ปีในขนาดหน้ามาตรฐาน 6" x 9" ก็ได้ PDF ที่ยาวเกิน 1,000 หน้าไปมาก
  • เนื่องจากช่วงเวลาที่นำมาทำมีความยาวครบ 3 ปีพอดี จึงแบ่งทั้งหมดเป็น 3 เล่ม เพื่อลดขนาดแต่ละเล่มให้อยู่ในระดับที่พิมพ์ได้
  • ผลลัพธ์สุดท้ายมีความยาวรวมประมาณ 1,300 หน้า

พิมพ์ด้วย Barnes & Noble Press

  • หลังพิจารณาตัวเลือกการพิมพ์หลายแบบ ก็เลือก Barnes and Noble Press
  • แม้จะแพงกว่าทางเลือกอื่นอย่าง Lulu หรือ Amazon KDP เล็กน้อย แต่เหมาะกว่าเพราะเวลาพิมพ์หนังสือใช้ส่วนตัว ไม่จำเป็นต้อง “ตีพิมพ์” หนังสือออกสู่สาธารณะ
  • สามารถพิมพ์ทั้ง 3 เล่ม รวมราว 1,300 หน้า ได้ในราคา 30 ดอลลาร์ รวมค่าส่ง
  • เมื่ออัปโหลด PDF เนื้อหาเข้าไป เว็บไซต์ B&N Press จะสร้างขนาดที่ต้องใช้สำหรับปกหนังสือ และนำขนาดนั้นไปทำปกของแต่ละเล่มด้วย Inkscape
  • โดยรวมแล้วเว็บไซต์ B&N Press ช้ามาก และระหว่างสั่งซื้อยังมีปัญหาที่หน้า checkout เปิดไม่ขึ้นนานเกิน 24 ชั่วโมง
  • หลังจากปัญหาได้รับการแก้ไข คำสั่งซื้อจึงดำเนินต่อ และไม่กี่สัปดาห์ต่อมาก็ได้รับหนังสือจริงทั้ง 3 เล่ม
  • การเปิดไล่ดูแบบหนังสือจริงนั้น ง่ายกว่าการย้อนหาบทสนทนาเก่าบนโทรศัพท์มาก

ลองทำเองได้

  • ซอร์สโค้ดยังจัดระเบียบได้ไม่เรียบร้อยนัก และยังไม่ได้แพ็กเป็น Cargo binary แต่ปริมาณโค้ดไม่ได้มาก
  • โค้ดของโปรเจกต์เผยแพร่อยู่ที่ bkettle/message-book

1 ความคิดเห็น

 
GN⁺ 2024-03-08
ความเห็นใน Hacker News
  • ชอบมากตรงที่มันชี้ให้เห็นว่าเราควรเก็บ บันทึกทางกายภาพ ของจดหมายส่วนตัวไว้ให้มากกว่านี้
    ตอนเห็นแค่พาดหัวก็นึกว่าจะเป็นเรื่องที่ LLM สร้างเรื่องเล่าของเหตุการณ์จากประวัติข้อความ และคิดว่าถ้าทำเป็นบริการก็น่าจะเจ๋งดี

    • ฉันก็คิดแบบนั้นเหมือนกัน แต่เรื่องจริงดีกว่านั้นมาก
      ตอนนี้เลยอยากลองทำกับ ประวัติแชต Telegram ของตัวเองบ้าง
    • ข้อเสียใหญ่ของอีเมลส่วนตัวและข้อความส่วนตัวคือ จดหมายส่วนตัว จำนวนมหาศาลที่จะหายไปจนคนทำประวัติศาสตร์ในอนาคตไม่มีวันได้เห็น
      มีหนังสือรวมจดหมายของ Feynmann, Feyeraband, Einstein และคนอื่น ๆ แต่ทุกวันนี้แทบทุกอย่างกลายเป็นอีเมลที่อยู่หลังรหัสผ่าน จึงมีโอกาสสูงมากที่เราจะไม่ได้กองจดหมายส่วนตัวไว้ใช้ทำความเข้าใจบุคคลสำคัญทางประวัติศาสตร์ในอนาคต
    • ในฐานะงานศิลปะมันดี แต่ในแง่ประโยชน์ใช้สอยยังน่าสงสัย
      ถ้าต้องการสำเนาจริง ๆ ก็แค่คัดลอกลง microSD และถ้ากลัวหายก็ทำไว้สักสามชุด
    • เห็นชื่อแล้วฉันจินตนาการแบบนั้นเป๊ะ และตอนนั้นก็คิดอยู่แล้วว่าน่าจะน่าสนใจมาก
      ตอนนี้กลับอยากลองทำอะไรคล้าย ๆ กันด้วยตัวเอง
    • ฉันก็นึกว่าจะเป็นเรื่องเกี่ยวกับ นิยายอาชญากรรมที่ AI สร้างขึ้น ทั้งเล่มจากประวัติแชตเหมือนกัน
  • เจ๋งมากที่ได้เห็นไลบรารีที่ฉันทำ imessage-exporter ถูกนำไปใช้งานจริง
    เป็นกรณีใช้งานที่น่าสนใจมาก

    • ไม่นานมานี้ฉันกำลังขุด ไฟล์ SQLite เพื่อเฝ้าดูการเปลี่ยนแปลงที่บ่งบอกว่ามีข้อความใหม่และดึงข้อมูลออกมา โดยต้นแบบแรกที่ทำแบบใช้ทริกเล็ก ๆ น้อย ๆ นั้นโดยรวมก็ใช้งานได้
      รอบหน้าถ้ากลับมาดูไอเดียนี้อีก ฉันตั้งใจจะเปลี่ยนไปใช้ไลบรารีนั้น และถ้ามีคำแนะนำหรือทิปเกี่ยวกับการเข้าถึงแบบเกือบเรียลไทม์ก็อยากรู้เหมือนกัน
  • ป้าของฉันเก็บรักษาจดหมายและไดอารีที่คุณตากับคุณยายเขียนถึงกันในช่วงสงครามโลกครั้งที่ 2 ไว้อย่างยอดเยี่ยม
    สิ่งแรกที่ผุดขึ้นมาในหัวคือ ลูก ๆ และหลาน ๆ ของเราคงไม่ได้มีความสุขแบบเดียวกัน
    ถ้าสนใจลองดู บล็อก ได้

    • ถ้าคิดถึงคู่รักส่วนใหญ่ เรื่องนี้อาจต่างออกไปนิดหน่อย
      มันน่าจะใกล้เคียงกับการเก็บ กระดาษโน้ต ทุกใบที่เขียนว่า “ขากลับซื้อ นมมาด้วย”, “เธอไปรับเด็ก ๆ ใช่ไหม?”, “เจอกันอีก 20 นาที” มากกว่า
      ถึงอย่างนั้นมันก็มีเสน่ห์ในแบบของมัน หวังว่าจะไม่ฟังเหมือนตั้งใจมาดับอารมณ์
  • ถึงเวลาแล้วที่จะทำสิ่งนี้ให้ใช้กับ WhatsApp ได้ด้วยสำหรับชาวอังกฤษ
    ตอนแรกตื่นเต้นกับไอเดียโปรเจกต์นี้มาก ก่อนจะรู้ว่าถ้าจะฟอร์กก็คงต้องไปเรียน Rust
    แต่ยังไงก็ตาม เป็นไอเดียที่เจ๋งมากจริง ๆ และการอ่านประวัติแชตกับเพื่อน ๆ ก็ชวนให้คิดถึงวันเก่า ๆ มาก

    • แพ็กเกจ Python นี้สามารถส่งออก แชตสำรองของ WhatsApp เป็น JSON หรือ HTML ได้: https://github.com/KnugiHK/WhatsApp-Chat-Exporter
      มีลิงก์ไปยังเครื่องมือส่งออก Telegram ด้วย
    • WhatsApp ส่งออกแชตเป็น txt ได้ แต่ดูเหมือนข้อมูลจะหายไปบางส่วน
      เช่น ไม่แน่ใจว่าอีโมจิจะยังอยู่หรือเปล่า และไฟล์แนบหรือข้อความเสียงก็คงหายแน่นอน
      ถ้าจะดึงจากฐานข้อมูลสำรองก็น่าจะมีการเข้ารหัสอยู่ด้วย
    • ไม่ใช่แค่สหราชอาณาจักร แต่ทั้งโลกต่างหากที่ต้องการ
    • เราต้องการฟีเจอร์ที่ส่งออกข้อความและสื่อทั้งหมดในรูปแบบที่ตรวจดูได้อย่างสมเหตุสมผลแบบนี้จริง ๆ
      เอาจริง ๆ แค่มี คลังสำรองข้อมูล ที่มั่นใจได้ว่าสามารถกู้กลับไปยังอุปกรณ์อื่นได้ในภายหลังก็ยังดี
  • มีแค่ฉันหรือเปล่าที่รู้สึกกังวลนิด ๆ กับไอเดียส่งประวัติข้อความส่วนตัวทั้งหมดไปให้สำนักพิมพ์เพื่อพิมพ์?

    • ถ้าฉันส่งประวัติข้อความส่วนตัวทั้งหมดให้สำนักพิมพ์ ฝ่ายที่น่าจะกังวลที่สุดคงเป็นสำนักพิมพ์มากกว่า
    • สำนักพิมพ์ทำธุรกิจพ่นหมึกลงบนกระดาษ
      สิ่งที่ควรกังวลกว่าคือการถูกโจมตีแบบ man-in-the-middle โดย บริษัททำเหมืองข้อมูล ที่มีหน้าที่เปลี่ยนพฤติกรรมคนผ่านโฆษณาหรือเครื่องมือสร้างฉันทามติ
    • ฉันก็กังวลเหมือนกัน
      ฉันวางแผนจะทำแบบที่ผู้เขียนทำมาค่อนข้างนานแล้ว และนี่ก็เป็นหนึ่งในอุปสรรคที่ยังแก้ไม่ได้
      การพิมพ์และเข้าเล่มเองที่บ้านน่าจะเป็นทางเลือกเดียว และตอนนี้สิ่งที่เหลือคือจะทำอย่างไรให้ผลงานสุดท้ายทนทานและจับแล้วรู้สึกดี
    • คงไม่น่าแปลกใจถ้าไฟล์ไม่ได้ถูกเก็บไว้อย่างปลอดภัยเป็นพิเศษ
      มีโอกาสมากที่สำนักพิมพ์จะไม่คาดคิดว่าใน PDF สำหรับพิมพ์จะมี ข้อมูลระบุตัวตนส่วนบุคคล อยู่ และระยะเวลาเก็บข้อมูลก็อาจยาวไปแบบไม่มีกำหนด
    • อาจลองใช้สวิตช์ —rot13 ดู :-)
  • อาจเป็นความเห็นที่ไม่ค่อยมีคนชอบ แต่ฉันว่ามันแอบหลอนนิด ๆ
    ตั้งแต่แรกก็ไม่เข้าใจว่าทำไมคนถึงอยากเก็บบันทึกบทสนทนาส่วนตัวไว้
    ต่างจากโพสต์สาธารณะหรือบล็อก ข้อความส่วนตัว ควรเป็นของชั่วคราว เพราะเราไม่ได้อัดเสียงบทสนทนาแบบเจอหน้าหรือโทรศัพท์ไว้ทั้งหมดนี่

    • เป็นหัวข้อที่น่าสนใจ และอาจไม่ใช่ความเห็นที่ไม่มีคนเห็นด้วยก็ได้
      ดูเหมือนแต่ละคนจะมองเรื่องนี้ต่างกัน
      สำหรับฉัน ฉันพยายามเก็บประวัติแชตทุกอย่างที่ทำได้ และก็อยากให้บทสนทนาแบบเจอหน้าและการคุยโทรศัพท์ถูกบันทึกทั้งหมดและเข้าถึงได้ง่ายด้วย
      ฉันมีความรู้สึกว่าผลรวมของประสบการณ์ทั้งหมดคือสิ่งที่เป็นตัวฉัน ดังนั้นจึงไม่อยากลืมประสบการณ์เหล่านั้น ถ้าจำไม่ได้ก็เหมือนตัวฉันหายไปบางส่วน
      แต่ฉันก็เคยดูตอนนั้นของ Black Mirror เหมือนกัน เลยรู้สึกขัดแย้งระหว่างความอยากจดจำทุกประสบการณ์ให้สมบูรณ์แบบ กับประโยชน์ทางจิตใจและอารมณ์ที่มาจากการสามารถลืมได้
    • เห็นด้วย
      แต่สำหรับฉัน สิ่งที่น่าอายยิ่งกว่าคือการรู้ว่าข้อความที่เคยส่งไว้ยังคงอยู่ตลอดไป
      ตัวฉันเมื่อ 10 ปีก่อน ต่างจากตอนนี้มาก จนเวลาอ่านข้อความเก่า ๆ แล้วรู้สึกกระอักกระอ่วนมาก
    • เข้าใจได้ทั้งสองด้าน
      จนถึงราวปี 2004 ฉันยังติดต่อกับผู้คนด้วยจดหมายจริงอยู่ และการกลับไปอ่านจดหมายที่โดยเฉพาะแฟนเก่าหรือพี่สาวน้องสาวที่ส่งมาตอนฉันเข้าเรียนมหาวิทยาลัยใหม่ ๆ หลังจากนั้นหลายปี เป็นเรื่องที่ชวนให้คิดถึงอดีตอย่างมาก
      ในทางกลับกัน หลังออกจากกองทัพฉันย้ายไปอยู่ที่เล็กลงมาก จึงเอาของส่วนใหญ่ไปเก็บในคลัง และตัดสินใจว่าของที่ผ่านไป 3 ปีแล้วยังไม่ได้แตะก็ไม่จำเป็น เลยยกให้ที่เก็บของไป
      ดูเหมือนในนั้นจะมีจดหมายเก่าและรูปถ่ายทั้งหมดรวมอยู่ด้วย แต่ฉันก็พูดไม่ได้จริง ๆ ว่าคิดถึงของพวกนั้น
      คนชอบพูดว่าไม่อยากลืมอดีต แต่ความจริงของการลืมคือคุณไม่รู้ตัวว่าตัวเองลืมไปแล้ว ดังนั้นพอลืมไปจริง ๆ มันก็ไม่มีผลกระทบที่รับรู้ได้
      พูดตามตรง ฉันจมอยู่กับความคิดถึงอดีตมากพอแล้ว และไม่คิดว่าต้องมีอะไรไว้ยึดติดมากกว่านี้ ฉันไม่ดูรายการทีวีใหม่ ๆ ไม่ฟังเพลงใหม่ ๆ และเหมือนติดค้างอยู่ในปี 1999 ทางความคิด ซึ่งก็ไม่แน่ใจว่าสุขภาพจิตดีไหม
    • ข้อความส่วนตัวไม่เหมือนการคุยกันต่อหน้าหรือการโทรศัพท์
      สิ่งที่เทียบได้ใกล้เคียงกว่าคือ จดหมาย ที่คงอยู่ได้นาน
    • ฉันไม่ได้ถือว่าสิ่งเหล่านั้นเป็นเรื่องส่วนตัวหรือชั่วคราวโดยอัตโนมัติ
      ข้อความต่าง ๆ ร้อยเรียงเป็นเรื่องราวหนึ่งเรื่อง และบันทึก จิตวิญญาณแห่งยุคสมัย ของคนรุ่นเราไว้
      ดูเหมือนผู้คนยังไม่ได้คิดกันมากพอว่าจะเก็บรักษาสิ่งเหล่านี้อย่างไร
      ส่วนตัวฉันชอบไอเดียนี้ และนึกภาพออกเลยว่าตัวเองจะส่งออกข้อความทั้งหมดหรือบางส่วนที่คุยกับแม่ เพื่อเก็บไว้เป็นความทรงจำของช่วงเวลานั้น
  • เจ๋งมากจริง ๆ และดูเหมือนจะเป็นของขวัญที่ยอดเยี่ยมสำหรับคนที่คุณรักได้ด้วย
    ช่วงนี้ฉันลองใช้ Nomic Atlas(https://docs.nomic.ai/) และใส่ประวัติแชตของตัวเองเข้าไปเยอะพอสมควร พบว่าการทำภาพแสดงกลุ่มตามหัวข้อของข้อความแล้วไล่ดูนั้นน่าสนใจมาก
    เลยคิดว่าถ้าสร้าง embedding ของข้อความแล้วทำ topic modeling ก็อาจดึงความสามารถในการค้นหาของโลกดิจิทัลมาใส่ในรูปแบบกายภาพได้
    แบบนั้นก็สามารถทำดัชนีตามหัวข้อไว้ท้ายเล่มจริง ๆ และใส่เลขหน้าอ้างอิงไปยังหน้าที่มีข้อความในหัวข้อนั้นได้

  • สคริปต์ Python สำหรับส่งออก iMessage บน Mac: https://pypi.org/project/imessage-reader/

  • อีก 2000 ปีข้างหน้า ตอนที่มีคนศึกษาว่าผู้คนในศตวรรษที่ 21 ใช้ชีวิตกันอย่างไร อาจเหลือเพียงหนังสือแบบนี้เท่านั้น
    ข้อมูลชั่วคราว อย่างทวีต แชต SMS อีเมล และรูปดิจิทัลในอุปกรณ์ส่วนตัว อาจหายไปหมดแล้ว

  • เพิ่งรู้ว่ามี BN Press สำหรับใช้งานส่วนบุคคล
    ฉันเคยดู KDP กับ Lulu มาบ้าง แต่หลังจากได้ลองใช้ Kindle แล้วชอบมันมาก ก็เลยตัดสินใจโฟกัสหลักไปที่อีบุ๊ก
    แต่ถ้าเป็นงานพิมพ์จำนวนจำกัดหรือทดลองพิมพ์ BN Press ก็ดูยอดเยี่ยมมาก และ 1300 หน้าในราคา 30 ดอลลาร์นี่น่าทึ่งจริง ๆ