บทนำ
- นี่คือส่วนแรกของซีรีส์เกี่ยวกับการเป็นเจ้าของข้อมูลและเทคโนโลยีด้วยตนเอง โดยอธิบายวิธีผสานโซลูชันปฏิทินแบบโฮสต์เอง
- เนื่องจากต้องเดินทางบ่อย การจัดการตารางเวลาจึงซับซ้อนขึ้น และเพื่อแก้ปัญหาความไม่สะดวกของระบบปฏิทินเดิม จึงตัดสินใจสร้างโซลูชันของตัวเองขึ้นมา
ข้อกำหนด
- ตารางเวลาต้องแสดงเป็นช่วงบล็อกในปฏิทินงาน
- ภรรยาสามารถสมัครรับข้อมูลปฏิทินได้
- กรอกอีเวนต์เพียงครั้งเดียวได้
- แก้ไขได้จากหลายอุปกรณ์
- ควบคุมข้อมูลได้อย่างสมบูรณ์
- ไม่สามารถแก้ปัญหาได้ด้วยการแชร์ปฏิทินงานให้ภรรยา
โซลูชันก่อนหน้า
- โซลูชันการแชร์ปฏิทินที่มีอยู่เดิมมักต้องใช้แพลตฟอร์มร่วมกัน หรือมีฟังก์ชันที่จำกัด
- เริ่มจากการเขียนอีเวนต์ปฏิทินด้วยไฟล์ 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
CalDAV ซับซ้อนและไม่ค่อยใช้งานได้อย่างเป็นธรรมชาติ เคยลองใช้ Radicale แต่ไม่ค่อยพอใจ ส่วนตัวเคยพยายามทำเซิร์ฟเวอร์ CalDAV เองแต่ก็ล้มเลิกไป
Radicale เป็นเซิร์ฟเวอร์ CalDAV แบบโมดูลาร์ที่เขียนด้วย Python และน่าแนะนำ
ใช้ Mailcow (SoGO) และ Fastmail บนเซิร์ฟเวอร์ส่วนตัวอยู่ แต่ปฏิทินทั้งสองซิงก์กันได้ไม่ดีนัก
ช่วงต้นยุค 2000 เคยใช้ Mozilla Sunbird เพื่อโฮสต์ปฏิทินบนเซิร์ฟเวอร์ Win2k ดูเหมือนตอนนั้นจะยังไม่มี CardDAV
ใช้ Baikal มาหลายปีแล้วและมีความเสถียรดี เชื่อมต่อผ่าน Thunderbird, DAVx5 และ Fossify Calendar
อยากสร้างฟังก์ชันสำหรับรูปภาพ อยากเลิกพึ่ง Dropbox และ Google
การซิงก์ Outlook กับ Google Calendar ผ่าน HTTP ไม่น่าเชื่อถือ
Baikal ดูน่าสนใจ เคยใช้ DAViCal มาก่อน แต่พอเวอร์ชัน iOS เปลี่ยนก็ทำให้ใช้งานได้ไม่เสถียร
ช่วงนี้กำลังพยายามย้ายออกจากคลาวด์ การย้ายข้อมูลใช้เวลา 2 สัปดาห์ และผลลัพธ์ออกมาดีกว่าที่คาด
ยังมีวิธีแบบ serverless ด้วยการใช้ DecSync โดย Thunderbird หรือ Evolution จะซิงก์กับแอป Android