2 คะแนน โดย GN⁺ 2025-04-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

บทนำ

  • นี่คือส่วนแรกของซีรีส์เกี่ยวกับการเป็นเจ้าของข้อมูลและเทคโนโลยีด้วยตนเอง โดยอธิบายวิธีผสานโซลูชันปฏิทินแบบโฮสต์เอง
  • เนื่องจากต้องเดินทางบ่อย การจัดการตารางเวลาจึงซับซ้อนขึ้น และเพื่อแก้ปัญหาความไม่สะดวกของระบบปฏิทินเดิม จึงตัดสินใจสร้างโซลูชันของตัวเองขึ้นมา

ข้อกำหนด

  • ตารางเวลาต้องแสดงเป็นช่วงบล็อกในปฏิทินงาน
  • ภรรยาสามารถสมัครรับข้อมูลปฏิทินได้
  • กรอกอีเวนต์เพียงครั้งเดียวได้
  • แก้ไขได้จากหลายอุปกรณ์
  • ควบคุมข้อมูลได้อย่างสมบูรณ์
  • ไม่สามารถแก้ปัญหาได้ด้วยการแชร์ปฏิทินงานให้ภรรยา

โซลูชันก่อนหน้า

  • โซลูชันการแชร์ปฏิทินที่มีอยู่เดิมมักต้องใช้แพลตฟอร์มร่วมกัน หรือมีฟังก์ชันที่จำกัด
  • เริ่มจากการเขียนอีเวนต์ปฏิทินด้วยไฟล์ YAML แล้วแปลงเป็นไฟล์ ICS เพื่อแชร์ แต่ต่อมาดูแลรักษาได้ยากขึ้น

สถาปัตยกรรม

  • สร้างโซลูชันที่ใช้เซิร์ฟเวอร์ CalDAV เพื่อให้จัดการปฏิทินได้จากหลายอุปกรณ์
  • เชื่อมต่อกับแหล่งข้อมูลหลายรูปแบบเพื่ออัปเดตอีเวนต์อัตโนมัติ และให้บริการออกมาเป็นไฟล์ ICS

การตั้งค่า Baïkal

  • ใช้ Baïkal เพื่อตั้งค่าเซิร์ฟเวอร์ CalDAV และทำให้ดีพลอยได้ง่ายผ่าน Docker Compose
  • ใช้ nginx reverse proxy เพื่อตั้งค่าให้เข้าถึงได้ผ่านเว็บ

การตั้งค่าระบบจัดหมวดหมู่อีเวนต์

  • ใช้คุณสมบัติ CATEGORIES ของ iCalendar เพื่อจัดหมวดหมู่อีเวนต์ และใช้ Python enum ในการเขียนโมเดลข้อมูล
  • ทำให้ค้นหาอีเวนต์ได้ง่าย หรือแยกสีตามหมวดหมู่ได้

การคอมไพล์และแชร์ปฏิทิน

  • ดึงอีเวนต์อัตโนมัติผ่าน IMAP, API, ไฟล์ ICS ฯลฯ แล้วเพิ่มเข้า Baïkal จากนั้นแปลงเป็นไฟล์ ICS เพื่อแชร์บนเว็บ
  • ตั้งค่าให้อัปเดตทุก 15 นาทีผ่านงาน cron

การแชร์กับปฏิทินงาน

  • ใช้ Google Script Engine เพื่อคัดลอกอีเวนต์ไปยังปฏิทินงาน และใช้การกำหนดสีตามคุณสมบัติ CATEGORIES

บทสรุป

  • จากการทดสอบตลอด 6 เดือน ระบบทำงานได้ดีและช่วยเรื่องการจัดการตารางการเดินทางอย่างมาก
  • แม้จะมีค่าใช้จ่ายเซิร์ฟเวอร์เดือนละ $100 แต่ก็เห็นว่าคุ้มค่าเพราะความสะดวกในการจัดการตารางเวลา

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

 
GN⁺ 2025-04-11
ความคิดเห็นจาก Hacker News
  • CalDAV ซับซ้อนและไม่ค่อยใช้งานได้อย่างเป็นธรรมชาติ เคยลองใช้ Radicale แต่ไม่ค่อยพอใจ ส่วนตัวเคยพยายามทำเซิร์ฟเวอร์ CalDAV เองแต่ก็ล้มเลิกไป

    • เลยเลือกโฮสต์ไฟล์ iCal ไว้บน S3 bucket และใช้ ICSx5 เพื่อซิงก์บน Android แทน ไม่ต้องใช้ CalDAV ใช้แค่ HTTPS
    • ปฏิทิน FOSS ยังมีข้อจำกัดอยู่มาก และ ICSx5 ก็ใช้บน GrapheneOS ไม่ได้ จึงย้ายไปใช้ Proton Calendar แทน แม้จะไม่สมบูรณ์แบบแต่ก็ตอบโจทย์ที่ต้องการ
    • การใช้ฟอร์แมต iCalendar เป็นแนวทางที่ดี แต่แต่ละซอฟต์แวร์รองรับความสามารถไม่เหมือนกัน เลยตัดสินใจใส่เมทาดาทาไว้ในช่องคำอธิบาย
    • ใช้ซอฟต์แวร์รวบรวมข้อมูลจากหลายเว็บไซต์ แล้วกรองเฉพาะอีเวนต์ทางสังคมที่สนใจมารวมเป็นปฏิทินเดียว
  • Radicale เป็นเซิร์ฟเวอร์ CalDAV แบบโมดูลาร์ที่เขียนด้วย Python และน่าแนะนำ

    • ข้อมูลถูกเก็บเป็นไฟล์ข้อความ และติดตามรวมถึงสำรองข้อมูลด้วย git
    • การยืนยันตัวตนใช้ pam ของระบบโฮสต์
    • สำหรับการแชร์ปฏิทิน มีการรันสคริปต์เป็นระยะเพื่อสร้าง symbolic link ของปฏิทินให้กับผู้ใช้ทุกคนที่มีสิทธิ์
    • รองรับ access control list โดยใช้คุณสมบัติ CalDav แบบกำหนดเองและเว็บปลั๊กอินที่ปรับแก้
    • ปฏิทินสาธารณะให้สิทธิ์อ่านแก่ผู้ใช้ 'public' ผ่าน ACL
  • ใช้ Mailcow (SoGO) และ Fastmail บนเซิร์ฟเวอร์ส่วนตัวอยู่ แต่ปฏิทินทั้งสองซิงก์กันได้ไม่ดีนัก

    • ยังทำให้ปฏิทินของ Mailcow ทำงานร่วมกับเครื่องมืออื่นได้ไม่ดี จึงซิงก์แบบกึ่งอัตโนมัติอยู่
    • อยากลอง Baïkal ดู และอาจเป็นโอกาสในการเปลี่ยน Mailcow ไปใช้บริการเมลแบบ self-hosted ตัวอื่นด้วย
  • ช่วงต้นยุค 2000 เคยใช้ Mozilla Sunbird เพื่อโฮสต์ปฏิทินบนเซิร์ฟเวอร์ Win2k ดูเหมือนตอนนั้นจะยังไม่มี CardDAV

    • นำข้อมูลทั้งหมดเข้า Google Calendar แล้ว จึงยังสามารถเห็นงานมหาวิทยาลัยเก่า ๆ ในอดีตได้
  • ใช้ Baikal มาหลายปีแล้วและมีความเสถียรดี เชื่อมต่อผ่าน Thunderbird, DAVx5 และ Fossify Calendar

    • Fossify Calendar เป็นแอปที่ fork มาจากแอปปฏิทินของ Simple Mobile Tools และถือว่าฟีเจอร์ครบที่สุด
    • ใช้งานง่ายเพราะมีตัวเลือกที่จำเป็นให้ครบแบบตรงไปตรงมา
  • อยากสร้างฟังก์ชันสำหรับรูปภาพ อยากเลิกพึ่ง Dropbox และ Google

    • ต้องการฟังก์ชันที่จัดกลุ่มรูปตามวันครบรอบ กิจกรรม ครอบครัว ฯลฯ แล้วส่งไปยังโทรศัพท์
    • อยากให้สามารถเก็บรูปที่ถ่ายจากอุปกรณ์ลงเซิร์ฟเวอร์ได้
    • กำลังติดตั้งเครื่อง true-nas ขนาด 2TB ไว้สามแห่งและพัฒนาฟังก์ชันนี้อยู่
  • การซิงก์ Outlook กับ Google Calendar ผ่าน HTTP ไม่น่าเชื่อถือ

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

    • ถ้าจะลองอีกครั้ง จะพิจารณา DAViCal, Radicale และ Baikal
  • ช่วงนี้กำลังพยายามย้ายออกจากคลาวด์ การย้ายข้อมูลใช้เวลา 2 สัปดาห์ และผลลัพธ์ออกมาดีกว่าที่คาด

    • จัดการบริการทุกอย่างเองยกเว้นอีเมล โดย Asus PN40 ช่วยได้มาก
    • CalDAV ยังไม่นิ่ง แต่ Nextcloud ก็ตอบโจทย์ความต้องการส่วนใหญ่ได้
    • เมื่อนำไปใช้ร่วมกับโซลูชันโอเพนซอร์สหลายตัว ก็ครอบคลุมความต้องการทั้งหมดได้
  • ยังมีวิธีแบบ serverless ด้วยการใช้ DecSync โดย Thunderbird หรือ Evolution จะซิงก์กับแอป Android

    • Cal, Cards, งาน และ RSS จะถูกจำลองไปยัง peer อื่น ๆ