2 pontos por GN⁺ 2025-04-11 | 1 comentários | Compartilhar no WhatsApp

Introdução

  • Primeira parte de uma série sobre possuir diretamente os próprios dados e a própria tecnologia, explicando como integrar uma solução de calendário self-hosted.
  • Com viagens frequentes, o gerenciamento da agenda ficou mais complexo e, para resolver os inconvenientes dos sistemas de calendário existentes, foi criada uma solução própria.

Requisitos

  • Os compromissos devem aparecer como bloqueios no calendário de trabalho.
  • A esposa deve poder assinar o calendário.
  • Os eventos devem ser inseridos apenas uma vez.
  • Deve ser possível editar em vários dispositivos.
  • É preciso ter controle total dos dados.
  • Não é possível resolver o problema compartilhando o calendário de trabalho com a esposa.

Solução anterior

  • As soluções existentes de compartilhamento de calendário exigiam uma plataforma em comum ou ofereciam funcionalidades limitadas.
  • Começou com uma abordagem de escrever eventos de calendário em arquivos YAML e convertê-los em arquivos ICS para compartilhamento, mas a manutenção se tornou difícil.

Arquitetura

  • Foi construída uma solução usando um servidor CalDAV para gerenciar o calendário em vários dispositivos.
  • Ela se conecta a várias fontes de dados para atualizar eventos automaticamente e fornecê-los como arquivos ICS.

Configuração do Baïkal

  • O Baïkal foi usado para configurar o servidor CalDAV, com implantação facilitada via Docker Compose.
  • Também foi configurado para acesso pela web usando um proxy reverso nginx.

Configuração do sistema de classificação de eventos

  • A propriedade CATEGORIES do iCalendar foi usada para classificar os eventos, e o modelo de dados foi criado com enum do Python.
  • Isso permite pesquisar eventos com facilidade ou diferenciá-los por cores.

Compilação e compartilhamento do calendário

  • Os eventos são importados automaticamente via IMAP, API, arquivos ICS etc., adicionados ao Baïkal e depois convertidos em arquivos ICS para compartilhamento na web.
  • Foi configurado para ser atualizado a cada 15 minutos por meio de um trabalho cron.

Compartilhamento com o calendário de trabalho

  • O Google Script Engine foi usado para copiar os eventos para o calendário de trabalho e aplicar codificação por cores com base na propriedade CATEGORIES.

Conclusão

  • Após 6 meses de testes, o sistema tem funcionado bem e ajudado bastante no gerenciamento de agendas de viagem.
  • Embora haja um custo mensal de servidor de US$ 100, concluiu-se que ele vale a pena pela praticidade no gerenciamento da agenda.

1 comentários

 
GN⁺ 2025-04-11
Comentários do Hacker News
  • O CalDAV é complexo e pouco intuitivo. Já tentei usar o Radicale, mas não fiquei satisfeito. Pessoalmente, tentei implementar um servidor CalDAV, mas desisti

    • Em vez disso, hospedei um arquivo iCal em um bucket S3 e usei o ICSx5 para sincronizar no Android. Não precisei de CalDAV, apenas de HTTPS
    • Calendários FOSS ainda deixam a desejar, e como o ICSx5 não funciona no GrapheneOS, migrei para o Proton Calendar. Não é perfeito, mas atende às minhas necessidades
    • Usar o formato iCalendar é uma boa abordagem, mas como os recursos compatíveis variam de software para software, decidi colocar os metadados no campo de descrição
    • Uso software para coletar dados de vários sites, filtrar apenas os eventos sociais que me interessam e combiná-los em um único calendário
  • O Radicale é um servidor CalDAV modular escrito em Python e vale a recomendação

    • Os dados são armazenados como arquivos de texto e rastreados com git para versionamento e backup
    • A autenticação usa o pam do sistema hospedeiro
    • Para compartilhar calendários, executo periodicamente um script que cria links simbólicos dos calendários para todos os usuários autorizados
    • Suporta listas de controle de acesso com propriedades CalDav personalizadas e um plugin web modificado
    • Calendários públicos concedem permissão de leitura ao usuário 'public' por meio de ACL
  • Estou usando Mailcow (SoGO) e Fastmail em um servidor pessoal. Os dois calendários não sincronizam bem

    • Não consegui fazer o calendário do Mailcow funcionar direito com outras ferramentas, então faço a sincronização de forma semiautomática
    • Quero testar o Baïkal. Também seria uma oportunidade para trocar o Mailcow por outro serviço de e-mail self-hosted
  • No começo dos anos 2000, usei o Mozilla Sunbird para hospedar um calendário em um servidor Win2k. Acho que ainda não existia CardDAV

    • Importei todos os dados para o Google Calendar e ainda consigo ver tarefas antigas da faculdade e outras coisas do passado
  • Uso o Baikal há alguns anos e ele é estável. Conecto com Thunderbird, DAVx5 e Fossify Calendar

    • O Fossify Calendar é um fork do app de calendário do Simple Mobile Tools e é o mais rico em recursos
    • Ele oferece todas as opções de forma simples, então é fácil de usar
  • Quero criar algo para fotos. Quero sair do Dropbox e do Google

    • Quero um recurso para agrupar fotos por aniversário, atividade, família etc. e enviá-las para o celular
    • Quero poder armazenar no servidor as fotos tiradas no dispositivo
    • Estou instalando máquinas true-nas com 2 TB de espaço em três locais e construindo essa funcionalidade
  • Sincronizar Outlook e Google Calendar via HTTP não é confiável

    • Por causa de problemas de fuso horário, os horários das reuniões ficam sempre errados
    • Parece que usar um sistema próprio resolveria isso, mas tenho receio de criar reuniões com duas horas de diferença
  • O Baikal parece interessante. Já usei DAViCal no passado, mas ele deixou de ser confiável quando a versão do iOS mudou

    • Quando eu tentar de novo, vou considerar DAViCal, Radicale e Baikal
  • Recentemente estou tentando sair da nuvem. A migração dos dados levou duas semanas e funcionou melhor do que eu esperava

    • Exceto pelo e-mail, estou cuidando de todos os serviços por conta própria, e o Asus PN40 ajuda bastante
    • O CalDAV é instável, mas o Nextcloud atende à maior parte das minhas necessidades
    • Combinado com várias soluções open source, ele cobre tudo de que preciso
  • Também existe a opção sem servidor usando DecSync. Thunderbird ou Evolution sincronizam com apps Android

    • Calendário, contatos, tarefas e RSS são replicados para outros pares