Recursos do plugin de calendário para torná-lo realmente útil para nós

Continuando a discussão de Discourse Calendar:

O Projeto Fedora atualmente tem nosso próprio aplicativo web de calendário, Fedocal. Ele está programado para uma atualização, e estou pensando se poderíamos substituir os calendários no Discourse em vez de reescrever o aplicativo autônomo. Isso não é realmente uma solicitação de recurso, mas sim uma captura de nossos casos de uso e do que considero que está faltando enquanto avaliamos o que fazer.

Casos de Uso

Existem três casos de uso importantes que posso ver para o Fedocal. Se houver mais, por favor, me avise e eu os adicionarei à consideração.

  1. Agendamento de reuniões. Este é de longe o mais importante.
  2. Permitir que as pessoas compartilhem sua disponibilidade. Atualmente, solicitamos que pessoas com responsabilidade no projeto insiram isso para férias, mas poucas pessoas realmente o fazem. (Eu, pessoalmente, acho muito complicado quando me lembro.)
  3. Exibição de eventos do Fedora como Flock to Fedora, Semana da Diversidade ou Festas de Lançamento. Na verdade, não fazemos isso hoje.

Outras Possibilidades

  • Tentamos usar o Fedocal para a programação da conferência Flock em 2013, mas não o fazemos desde então. Seria bom se tivéssemos uma solução que tornasse isso atraente e fácil.
  • Exibição da própria programação de lançamento do Fedora. Atualmente, acho que usamos isso apenas para agendar as reuniões de “go/no-go”, não a programação em si. Se fizéssemos isso, precisaria vir automaticamente de Fedora Project schedules em vez de exigir entrada manual.

Deficiências do plugin atual do Discourse Calendar

O sistema de “eventos” que está sendo adicionado a ele está atualmente incorreto para o que precisamos. (Ele coleta “eventos” de postagens de todo o site e os coloca em um único calendário global. Precisamos de muito mais do que isso.

Minha primeira suposição é que nos concentraríamos em estender a parte “tradicional” do plugin de calendário, que tem um calendário na primeira resposta a um tópico que é “alimentado” por respostas apenas a esse tópico. No entanto, poderia ser possível que a outra abordagem — capturar eventos em todo o site — fosse melhor. Nesse caso, porém, precisaríamos estendê-lo para poder ter múltiplos calendários para direcionar. (E nesse caso, seria bom poder incorporá-los em tópicos fixados, não apenas escondidos no menu hambúrguer.)

Dito isso, aqui estão algumas coisas que precisaríamos:

Em geral

  1. A exibição do calendário em si é bastante rudimentar.
  • Poderia ser muito mais bonito
  • Não escala ou se adapta à forma como está sendo exibido de forma alguma
  • É codificado para semanas de segunda a domingo no estilo da UE
  • Parece mostrar sempre os dias em UTC, embora as entradas estejam em fusos horários locais, o que faz com que eventos de um dia inteiro em um fuso horário local pareçam abranger dois dias no calendário. (A equipe do Discourse está ciente desse bug.)
  • A visualização mensal atualmente mostra apenas os primeiros caracteres da descrição de um evento. Isso é bom se o calendário for apenas sobre uma coisa simples (veja em uso aqui para Fedora Social Hour, mas não é bom para um calendário com muitas coisas diferentes.
  • Atualmente, a versão “Feriado” do calendário pode atribuir cores aos eventos, mas o faz usando um valor derivado programaticamente do nome de usuário. Isso deveria ser configurável por evento e se aplicar a todos os calendários, não apenas ao de feriados.
  1. Não acho que haja um feed .ical? Seria bom para as pessoas poderem adicionar ao Google Agenda ou o que quer que seja.
  2. Bom ter: capacidade de gerar e-mails de lembrete enviados para listas de e-mail, não apenas para usuários inscritos. Ainda não temos todos no Discourse!
  3. Bom ter: uma visualização de calendário pessoal onde você opta por quais entradas rastrear.

Caso de Uso de Reuniões

  1. O Fedocal tem dois “eixos” principais — o grupo ao qual a entrada do calendário pertence (como “conselho”) e o local (como “#fedora-meeting”). O plugin de calendário pode fazer um ou outro: podemos criar um tópico “Reuniões do Conselho Fedora” ou um tópico “Canal de Reuniões Fedora”, mas as entradas não seriam vinculadas. Não tenho muita certeza de qual seria o melhor design para isso como um plugin — acho que poderíamos usar alguma experiência de designer de UX para pensar sobre isso.
  • Estaria tudo bem se o eixo “grupo” fossem grupos do Discourse, especialmente porque NÓS UM DIA EM BREVE ESPERO teremos grupos do Discourse vinculados ao nosso SSO.
  • Ou, possivelmente, o eixo “grupo” do calendário poderia ser uma tag. Isso pode ser mais flexível e funcionaria para nós porque estamos planejando um mapeamento de grupo para tag para a organização do nosso site.
  • O eixo “locais” é curto — temos um punhado de canais de reunião, e provavelmente é suficiente permitir um local “outro” para casos incomuns.
  1. Crítico: O sistema precisa impedir — ou pelo menos avisar sobre — conflitos em ambos os eixos. Ou seja, não pode haver duas reuniões do grupo do conselho ao mesmo tempo, e não pode haver duas reuniões de um grupo diferente no mesmo local ao mesmo tempo.
  • exceto se tivermos um “outro” genérico… então, acho que alguns locais deveriam permitir sobreposições.
  1. A sintaxe para eventos recorrentes é meio estranha, mas ok. No entanto, eventos recorrentes apenas aparecem na grade do calendário como recorrentes (e no lembrete como atualizados para o próximo), nada mais. E deveria haver mais:
  • Crítico: Deve ser possível para os usuários se inscreverem em uma notificação para cada evento recorrente, por entrada de calendário.
  • Bom ter: uma configuração por grupo do Discourse para as notificações padrão para um determinado calendário, de modo que, por exemplo, os membros do grupo do conselho recebam notificações padrão para as entradas do calendário do conselho.
  • Bom ter: capacidade de configurar também notificações de aviso de 15 minutos para reuniões futuras.
  • Importante: Deve ser possível marcar eventos específicos para serem pulados (ou para serem realizados em outro horário) sem alterar tudo.
  1. No momento, a duração do evento é feita com entradas como [date=2021-11-28 time=12:00:00 timezone="America/New_York"] → [date=2021-11-28 time=13:00:00 timezone="America/New_York"]. Isso é tedioso de inserir e o resultado (2021-11-28T17:00:00Z2021-11-28T18:00:00Z) não é imediatamente óbvio. Seria bom ter [date=2021-11-28 time=12:00:00 timezone="America/New_York" duration="1 hour"] em vez disso.
  2. Bom ter: Entradas sem duração devem ser visualmente diferentes — e talvez permitidas apenas para entradas “dia inteiro”.
  3. Bom ter: cada entrada de calendário (separadamente para as recorrentes) poderia ter um link para um tópico de pauta + notas. Este tópico não seria criado automaticamente sem interação, mas deveria ser fácil de iniciar com um clique, e uma vez criado, vinculado automaticamente.

Caso de Uso de “Feriados”

  1. O calendário de feriados também deve ter consciência de grupo. Atualmente, ele tem alguns tratamentos especiais para a equipe (do site Discourse) — isso deve ser generalizado e configurável, e diferentes calendários permitidos para diferentes grupos, bem como um global.
  2. Em sua configuração padrão, o calendário de feriados mostra feriados nacionais padrão para todas as pessoas que têm sua localidade configurada. Se isso for mais do que, digamos, cinco pessoas em não mais do que dois locais diferentes, ele sobrecarrega todo o resto. O Discourse nos forneceu um hack temporário para ocultar isso, no entanto.
  3. Bom ter: Atualmente, os membros da equipe recebem um emoji :palm_tree: ao lado de seus nomes de usuário quando estão de férias, visível apenas para outros membros da equipe. A visibilidade deste ícone deve ser configurável.
  4. Bom ter: permitir a configuração de qual emoji é mostrado.
  • Bônus bom ter: permitir que os usuários selecionem de uma lista de emojis e motivos para um determinado período de indisponibilidade (férias, doente, viagem, etc.)

Eventos Fedora

Na verdade, acho que o que temos hoje funcionaria para isso. No entanto, algumas das coisas acima — exibição de calendário mais bonita e flexível, notificações, cores — seriam úteis.

Para outras possibilidades

  • O caso de uso da programação de conferências é apenas o caso de uso da programação de reuniões, mas de forma muito intensa. Manter o controle manual de conflitos torna-se impossível. Para isso, pode ser necessário um eixo de nível de usuário em vez de um eixo de nível de grupo. (Palestrantes não podem estar em dois lugares ao mesmo tempo.) E ao contrário de nossos locais de sala de reunião, que não mudaram muito nos últimos 15 anos (exceto por atualizações de URL) e provavelmente não mudarão nos próximos 15, cada evento tem seu próprio conjunto de locais.
  • Calendário de programação de lançamento: Acho que isso é principalmente uma questão de automação na importação dos dados de programação existentes. O plugin de calendário existente poderia funcionar na maior parte, acho. Novamente, como com os Eventos Fedora, a codificação por cores seria bom.
14 curtidas

A Pavilion está trabalhando em um Plugin de Integração de Eventos para o Discourse (DEIP), que, inter alia, permitirá publicar eventos no Discourse a partir de outros serviços e plataformas. Enviamos uma proposta ao DAPSI (um programa NGI da UE), que foi aceita para financiamento. O programa começou ontem à noite e já estamos dando início aos trabalhos. Isso irá sobrepor-se a alguns dos pontos que você levantou.

Versão editada do resumo executivo da proposta

Não existe um modelo de dados abstrato para eventos de calendário em uso regular por serviços online de eventos. Primeiro, especificaremos e prototiparemos um modelo de dados funcional com base na assimilação de tentativas anteriores de padronização e nos modelos de dados de serviços de eventos populares (“Especificação e Protótipo do DEIP”). Em seguida, transformaremos essa especificação em um produto na forma de um plugin de código aberto para o Discourse, que permitirá que comunidades online transfiram facilmente dados de eventos de calendário entre plataformas populares de gerenciamento de eventos (inicialmente Eventbrite, Meetup e Zoom) e o Discourse, o software de comunidade de código aberto mais popular (“Produto do DEIP”). Ofereceremos assinaturas orientadas a serviços para empresas que utilizarem o MVP, a fim de garantir a viabilidade contínua do plugin ao longo do tempo.

O Produto do DEIP será uma alternativa de código aberto e comercialmente viável à API Oficial de Eventos lançada recentemente pelo Facebook, que oferece funcionalidades semelhantes, mas apenas para o “jardim murado” de dados de comunidade do Facebook. O Facebook tem investido em suas funcionalidades de comunidade há algum tempo, e esse investimento está crescendo. O foco contínuo do Facebook nesse aspecto de seu produto significa que alternativas de código aberto precisam melhorar continuamente ofertas equivalentes para permanecerem viáveis. A Especificação e o Produto do DEIP serão ferramentas vitais nessa luta.

O Discourse é uma das poucas plataformas de código aberto verdadeiramente viáveis para comunidades online. É o projeto de comunidade mais popular no GitHub e recentemente levantou 20 milhões de dólares para continuar a expandir sua organização em crescimento (55 funcionários apoiando mais de 32.000 comunidades). A plataforma do Discourse é 100% de código aberto e está profundamente enraizada nas comunidades e na cultura de software de código aberto.

A Pavilion (a candidata) é uma cooperativa de desenvolvedores e gerentes de produtos e um parceiro oficial do Discourse. Trabalhamos com o Discourse há mais de 6 anos e construímos uma parte substancial dos plugins de terceiros existentes para o Discourse, incluindo o plugin mais popular do Discourse e vários plugins que posteriormente foram adotados (tornados “oficiais”) pelo Discourse.org.

A combinação de Especificação e Produto servirá tanto como um expoente da padronização de modelos de dados de eventos de calendário quanto fornecerá uma solução eficiente de código aberto para gerenciamento de eventos nas dezenas de milhares de comunidades online que utilizam o Discourse.

Resumo (Problema e Solução)

O principal problema enfrentado por comunidades online que gerenciam eventos é a integração de serviços. Comunidades utilizam uma mistura de plataformas de marketing, como o Eventbrite, plataformas de descoberta, como o meetup.com, ferramentas de reunião, como o Zoom, ou soluções tudo-em-um, como o Facebook. A dificuldade de gerenciar uma comunidade em múltiplos serviços cria um incentivo para o uso de soluções proprietárias que oferecem conveniência em detrimento da transparência e portabilidade.

O DEIP será tanto uma especificação e protótipo de modelo de dados de eventos de calendário quanto um plugin comercialmente viável de código aberto para o Discourse. Em resumo, o DEIP irá:

  1. Definir uma especificação prática de modelo de dados de eventos de calendário.
  2. Implementar a especificação em um protótipo funcional.
  3. Desenvolver o protótipo em um Plugin do Discourse com suporte para importação a partir de serviços populares de eventos e exportação usando padrões comuns de calendário.
  4. Lançar o plugin como um produto de código aberto, com um serviço de assinatura direcionado a usuários empresariais.

Especificação (O Componente de Pesquisa)

Os principais padrões no gerenciamento de eventos de calendário são o RFC 5545 (formato .ics) e o RFC 4791 (CalDAV, ou “feeds iCal”). O problema com esses padrões é que eles não são atualmente utilizados para modelar dados de eventos de calendário disponíveis em APIs modernas. Os objetos equivalentes disponíveis por meio das APIs do Eventbrite, Meetup e Zoom não se traduzem para o RFC 5545, nem entre si. Tentativas de órgãos do setor de desenvolver uma API Abstrata de Calendário ainda não deram frutos, apesar de algumas tentativas recentes. Além disso, serviços proprietários não fornecem feeds CalDAV amplos (de grupo/sítio/comunidade); às vezes fornecem apenas feeds específicos de usuário. Em resumo, há uma escassez significativa de padronização de modelos de dados de eventos de calendário.

O principal componente de pesquisa do DEIP será especificar um modelo de dados de eventos abstrato que implemente as tentativas existentes de padronização, mantendo a usabilidade prática em relação aos serviços proprietários relacionados a eventos mais populares (a “Especificação do DEIP”). Essa especificação será então convertida em um protótipo funcional (inicialmente em Ruby; posteriormente em outras linguagens), permitindo a criação, leitura, atualização e exclusão de eventos de calendário genéricos (o “Protótipo do DEIP”). Dependendo dos resultados desse trabalho, podemos buscar empacotar o Protótipo do DEIP para distribuição por meio de diferentes sistemas de pacotes, como gems do Ruby.

Além de formar a base do MVP (ver abaixo), a especificação e o protótipo serão publicados na página inicial do DEIP, acompanhados de explicações sobre o raciocínio por trás deles. Também dedicaremos uma seção de nossa própria comunidade para discussão adicional. Queremos ser uma parte ativa dos esforços para aproximar os serviços de software de eventos do uso de modelos de dados padronizados, a fim de melhorar a interoperabilidade e a portabilidade dos serviços.

Desenvolvimento (O Componente de Desenvolvimento)

Desenvolveremos a Especificação e o Protótipo do DEIP em um MVP Plugin do Discourse oferecendo as seguintes funcionalidades:

  • API de Eventos do Discourse com suporte para Criar, Ler e Excluir. O suporte para atualização (ou seja, comunicação bidirecional) será adicionado em uma versão posterior do produto.
  • Suporte específico para serviços populares. Inicialmente, Eventbrite, Meetup e Zoom.
  • Integração com o Plugin de Eventos do Discourse para exibir eventos dentro de tópicos do Discourse e fornecer um Calendário de Eventos dentro do próprio Discourse.
  • Um servidor CalDAV para fornecer um feed unificado de todos os eventos de uma comunidade, com a capacidade de filtrar por categoria e usuário.
  • Integração com o Plugin de Ferramentas Legais para suporte ao GDPR e com o Plugin de Localizações para mapeamento de localização GeoJSON usando soluções de mapeamento de código aberto.

Implantação (Relevância, impacto e benefícios)

A Pavilion apoia milhares de comunidades online por meio de nosso trabalho consultivo pago e trabalho voluntário de código aberto, muitas das quais demonstraram uma clara necessidade do Produto do DEIP, incluindo pesquisadores universitários, comunidades de apoio à saúde, entusiastas de hobbies, pequenas empresas, bairros, startups, sem fins lucrativos, empresas da Fortune 500, escritores de fantasia e entusiastas de fotografia de natureza. Para uma amostra dessa necessidade, veja aqui, aqui, aqui, aqui, aqui, aqui e aqui. A falta de facilidade de portabilidade e integração de eventos é frequentemente um fator chave na escolha entre soluções proprietárias fechadas, como o Facebook, e soluções de código aberto, como o Discourse.

Os membros da Pavilion estarão implantando pessoalmente o Produto do DEIP para nossos clientes existentes que realizam eventos, além de auxiliar os muitos usuários de código aberto de nosso trabalho, como os mencionados acima. Além do trabalho da Pavilion dentro da comunidade do Discourse, o DEIP terá:

  • Um site de produto independente, incluindo a Especificação e o Protótipo do DEIP.
  • Documentação da API.
  • Suporte por meio dos canais de suporte da Pavilion.

Nosso objetivo é que o Produto do DEIP seja uma alternativa viável ao gerenciamento de eventos em plataformas de comunidade proprietárias e que a Especificação e o Protótipo do DEIP avancem os esforços de padronização de modelos de dados de eventos de calendário.

Modelo de Negócio (Exploração Comercial)

A Pavilion desenvolveu um modelo de assinatura para nossos plugins de código aberto do Discourse que mantém nossos compromissos com o código aberto e o apoio a comunidades sem fins lucrativos, ao mesmo tempo em que garante que nossos membros sejam devidamente compensados por seu trabalho. O modelo possui as seguintes características:

  • Código 100% de código aberto.
  • Recursos selecionados de “negócios” que não são visíveis no cliente do aplicativo, a menos que o gerente da comunidade tenha adquirido uma assinatura.
  • Assinaturas gratuitas para comunidades sem fins lucrativos que utilizam os recursos de “negócios”.
  • Serviços orientados a negócios para assinantes pagos.

A restrição de recursos em uma base de código 100% de código aberto pode ser contornada programaticamente; no entanto, isso não é relevante para o mercado-alvo das assinaturas pagas. As empresas querem pagar por serviços que lhes sejam benéficos, e aqueles que optam por contornar as restrições não são os clientes-alvo para esse aspecto do produto.

Podemos potencialmente expandir o escopo deste projeto para incluir algumas das outras coisas que você mencionou, ou seja, aquelas focadas em recursos de eventos dentro do próprio Discourse; no entanto, precisaríamos de financiamento adicional. Se quiser discutir isso mais a fundo, pode me enviar uma mensagem privada sobre o assunto. De qualquer forma, compartilharei mais detalhes sobre o projeto DEIP aqui no meta conforme avançarmos.

10 curtidas

Parabéns, Angus!!! Isso é brilhante. Isso tem o potencial de contribuir significativamente para um mundo melhor (não apenas um monte de Fóruns, mas isso também é legal). Que você consiga!

8 curtidas

Olá Angus,

Você fez algum progresso com isso? É um problema sempre presente para todos os meus fóruns e que leva as pessoas a outras plataformas para reuniões e afins.

2 curtidas

Olá Nathan, teremos algumas coisas para compartilhar em cerca de um mês. Enquanto isso, você pode entrar em contato comigo privadamente em coop.pavilion.tech e posso ajudá-lo a configurar eventos em seu fórum.

Além do projeto DEIP, estamos pensando em reviver o Plugin de Eventos e podemos usá-lo para abordar algumas das preocupações mencionadas acima.

4 curtidas

Conforme prometido, aqui está o relatório completo sobre a Fase 1 do projeto do Plugin de Integração de Eventos do Discourse.

https://docs.google.com/document/d/1-oJsXivT_KRBZ-wUQ-TbHdO7Z-qf7z4GeiRiJ014V-E/edit?usp=sharing

E aqui está a implementação protótipo do modelo de dados de eventos (um gem ruby). Observe que o gem está em desenvolvimento e não está pronto para uso em produção.

https://github.com/paviliondev/omnievent

Como você notará ao ler o relatório de pesquisa, o próprio plugin será construído na Fase 2 do projeto.

4 curtidas

Esse é um trabalho impressionante, Angus. Estou ansioso para ver os frutos no próximo tempinho!

Fico intrigado com quantos paralelos existem com meu campo da informática em saúde. Sofremos os mesmos problemas de múltiplos modelos de dados proprietários desenvolvidos organicamente que não se integram bem. E os pacientes sofrem como resultado.

Existe um impressionante projeto de dados abertos que essencialmente busca fazer o mesmo para todos os dados de saúde:

2 curtidas

Apenas mais uma atualização para notar que nosso trabalho na Fase 1 foi favoravelmente revisado pela DAPSI e este projeto está progredindo para a Fase 2, ou seja, a construção do Plugin de Integração de Eventos. Parte disso envolverá uma reformulação do Plugin de Eventos Pavilion.

De fato. Tive uma boa conversa com @pacharanero sobre essa sobreposição durante o almoço em York.

5 curtidas

Apenas uma nota final aqui que a versão beta do Plugin de Integração de Eventos já está disponível :slight_smile:

Postarei mais atualizações nesse tópico.

5 curtidas