2 điểm bởi GN⁺ 2025-04-11 | 1 bình luận | Chia sẻ qua WhatsApp

Giới thiệu

  • Đây là phần đầu tiên trong loạt bài về việc trực tiếp sở hữu dữ liệu và công nghệ của mình, giải thích cách tích hợp một giải pháp lịch tự host.
  • Việc thường xuyên đi lại khiến quản lý lịch trình trở nên phức tạp, và tác giả đã xây dựng giải pháp riêng để khắc phục những bất tiện của các hệ thống lịch hiện có.

Yêu cầu

  • Lịch trình được hiển thị dưới dạng mục chặn trong lịch công việc.
  • Vợ có thể đăng ký theo dõi lịch.
  • Chỉ cần nhập sự kiện một lần.
  • Có thể chỉnh sửa trên nhiều thiết bị.
  • Có thể kiểm soát dữ liệu hoàn toàn.
  • Không thể giải quyết vấn đề bằng cách chia sẻ lịch công việc với vợ.

Giải pháp trước đây

  • Các giải pháp chia sẻ lịch hiện có либо yêu cầu cùng một nền tảng, либо chỉ cung cấp chức năng hạn chế.
  • Ban đầu, tác giả viết sự kiện lịch bằng tệp YAML rồi chuyển đổi sang tệp ICS để chia sẻ, nhưng việc bảo trì ngày càng khó khăn.

Kiến trúc

  • Tác giả xây dựng một giải pháp dùng máy chủ CalDAV để có thể quản lý lịch trên nhiều thiết bị.
  • Hệ thống kết nối với nhiều nguồn dữ liệu khác nhau để tự động cập nhật sự kiện và cung cấp chúng dưới dạng tệp ICS.

Thiết lập Baïkal

  • Tác giả dùng Baïkal để thiết lập máy chủ CalDAV và triển khai dễ dàng thông qua Docker Compose.
  • Sử dụng reverse proxy nginx để cấu hình truy cập qua web.

Thiết lập hệ thống phân loại sự kiện

  • Tận dụng thuộc tính CATEGORIES của iCalendar để phân loại sự kiện và viết mô hình dữ liệu bằng Python enum.
  • Nhờ đó có thể dễ dàng tìm kiếm sự kiện hoặc phân biệt chúng bằng màu sắc.

Biên dịch và chia sẻ lịch

  • Tự động lấy sự kiện qua IMAP, API, tệp ICS, v.v. rồi thêm vào Baïkal, sau đó chuyển đổi thành tệp ICS để chia sẻ trên web.
  • Thiết lập cập nhật mỗi 15 phút thông qua cron job.

Chia sẻ với lịch công việc

  • Dùng Google Script Engine để sao chép sự kiện sang lịch công việc và áp dụng mã màu dựa trên thuộc tính CATEGORIES.

Kết luận

  • Qua 6 tháng thử nghiệm, hệ thống hoạt động tốt và hỗ trợ đáng kể cho việc quản lý lịch trình di chuyển.
  • Dù tốn $100 chi phí máy chủ mỗi tháng, tác giả cho rằng điều đó hoàn toàn xứng đáng nhờ sự tiện lợi trong quản lý lịch.

1 bình luận

 
GN⁺ 2025-04-11
Ý kiến trên Hacker News
  • CalDAV phức tạp và không trực quan. Đã thử dùng Radicale nhưng không thấy hài lòng. Cá nhân từng định tự triển khai máy chủ CalDAV nhưng đã bỏ cuộc

    • Thay vào đó, đã host tệp iCal trong bucket S3 và dùng ICSx5 để đồng bộ trên Android. Không cần CalDAV, chỉ dùng HTTPS
    • Lịch FOSS vẫn còn thiếu sót và ICSx5 không hoạt động trên GrapheneOS nên đã chuyển sang Proton Calendar. Không hoàn hảo nhưng đáp ứng nhu cầu
    • Dùng định dạng iCalendar là một cách tiếp cận tốt, nhưng vì tính năng hỗ trợ khác nhau giữa các phần mềm nên đã quyết định đưa metadata vào trường mô tả
    • Dùng phần mềm để thu thập dữ liệu từ nhiều trang khác nhau, lọc ra chỉ các sự kiện xã hội đáng quan tâm rồi gộp vào một lịch duy nhất
  • Radicale là một máy chủ CalDAV mô-đun viết bằng Python, khá đáng để đề xuất

    • Dữ liệu được lưu dưới dạng tệp văn bản và được theo dõi cũng như sao lưu bằng git
    • Xác thực dùng pam của hệ thống host
    • Để chia sẻ lịch, chạy script định kỳ để tạo symbolic link lịch cho mọi người dùng có quyền
    • Hỗ trợ danh sách kiểm soát truy cập bằng thuộc tính CalDav tùy chỉnh và plugin web đã được chỉnh sửa
    • Lịch công khai cấp quyền đọc cho người dùng public thông qua ACL
  • Đang dùng Mailcow(SoGO) và Fastmail trên máy chủ cá nhân. Hai lịch này đồng bộ với nhau không tốt lắm

    • Không thể khiến lịch của Mailcow hoạt động tốt với các công cụ khác nên phải đồng bộ theo kiểu bán tự động
    • Muốn thử Baïkal. Đây cũng là cơ hội để thay Mailcow bằng một dịch vụ mail tự host khác
  • Đầu những năm 2000 đã dùng Mozilla Sunbird để host lịch trên máy chủ Win2k. Có vẻ khi đó chưa có CardDAV

    • Đã nhập toàn bộ dữ liệu vào Google Calendar và vẫn có thể xem các bài tập đại học ngày xưa
  • Đã dùng Baikal vài năm và thấy ổn định. Kết nối bằng Thunderbird, DAVx5 và Fossify Calendar

    • Fossify Calendar là ứng dụng được fork từ app lịch của Simple Mobile Tools và là app giàu tính năng nhất
    • Nó cung cấp đầy đủ mọi tùy chọn theo cách đơn giản nên rất dễ dùng
  • Muốn xây dựng một tính năng dành cho ảnh. Muốn rời bỏ Dropbox và Google

    • Muốn có tính năng nhóm ảnh theo ngày kỷ niệm, hoạt động, gia đình... rồi gửi xuống điện thoại
    • Muốn có thể lưu ảnh chụp từ thiết bị lên máy chủ
    • Đang lắp ba máy true-nas dung lượng 2TB ở ba nơi và xây dựng tính năng này
  • Việc đồng bộ Outlook và Google Calendar qua HTTP không đáng tin cậy

    • Do vấn đề múi giờ nên thời gian họp luôn bị sai
    • Có vẻ dùng hệ thống riêng sẽ giải quyết được, nhưng vẫn lo các cuộc họp sẽ bị tạo lệch hai tiếng
  • Baikal trông khá thú vị. Trước đây từng dùng DAViCal nhưng sau khi phiên bản iOS thay đổi thì nó không còn đáng tin nữa

    • Khi thử lại, sẽ cân nhắc DAViCal, Radicale và Baikal
  • Gần đây đang cố gắng rời khỏi cloud. Việc di chuyển dữ liệu mất 2 tuần và hoạt động tốt hơn kỳ vọng

    • Tự xử lý mọi dịch vụ trừ email, và Asus PN40 giúp ích rất nhiều
    • CalDAV không ổn định nhưng Nextcloud đáp ứng được phần lớn nhu cầu
    • Kết hợp với nhiều giải pháp mã nguồn mở khác để đáp ứng toàn bộ nhu cầu
  • Cũng có cách dùng DecSync theo kiểu serverless. Thunderbird hoặc Evolution sẽ đồng bộ với ứng dụng Android

    • Lịch, danh bạ, tác vụ và RSS được sao chép sang các peer khác