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

Pavilion is working on a Discourse Events Integration Plugin (DEIP), which, inter alia, will allow you to publish events to Discourse from other services and platforms. We submitted a proposal to DAPSI (an EU NGI program), which was accepted for funding. The program just kicked off (last night) and we’re starting work on it. This will overlap with some of the points you raised.

Edited version of the executive summary from the proposal

There is no abstract data model for calendar events in regular use by online event services. We will first specify and prototype a working data model based on an assimilation of previous standardisation attempts and the data models of popular event services (“DEIP Specification and Prototype”). We will then productize this specification in the form of an open source Discourse plugin that will allow online communities to easily transfer calendar event data between popular event management platforms (initially Eventbrite, Meetup and Zoom) and Discourse, the most popular open source community software (“DEIP Product”). We will be offering service-orientated subscriptions to businesses using the MVP to ensure the plugin’s continued viability over time.

The DEIP Product will be a commercially-viable open-source alternative to Facebook’s recently-launched Official Events API, which provides similar functionality, but for Facebook’s “walled garden” of community data. Facebook has been investing in its community features for some time, and that investment is growing. Facebook’s continued focus on this aspect of its product means open-source alternatives need to be continually improving equivalent offerings to stay viable. The DEIP Specification and Product will be vital tools in that struggle.

Discourse is one of the few truly viable open source platforms for online communities. It’s the most popular community project on github, and recently raised $20 Million USD to further grow its expanding organisation (55 employees supporting over 32,000 communities). Discourse’s platform is 100% open source and is deeply embedded in open source software communities and culture.

Pavilion (the Applicant) is a co-operative of developers and product managers and an official partner of Discourse. We’ve been working with Discourse for over 6 years and have built a substantial portion of the extant 3rd-party plugins for Discourse, including the most popular Discourse plugin and a number of plugins which have subsequently been adopted (made “official”) by Discourse.org.

The combined Specification and Product will serve as both an exponent of calendar event data model standardisation, and provide an efficient open-source solution for event management on the tens of thousands of online communities using Discourse.

Summary (Problem and Solution)

The primary problem faced by online communities managing events is service integration. Communities use a mixture of marketing platforms such as Eventbrite, discovery platforms such as meetup.com, meeting tools such as Zoom, or all-in-one solutions such as Facebook. The difficulty of managing a community across multiple services means there is an incentive to use proprietary solutions which offer convenience over transparency and portability.

The DEIP will be both a calendar event data model specification and prototype, and an open-source commercially-viable Discourse plugin. In summary, the DEIP will:

  1. Define a practical calendar event data model specification.
  2. Implement the specification in a working prototype.
  3. Develop the prototype into a Discourse Plugin with support for importing from popular event services, and exporting using common calendaring standards.
  4. Release the plugin as an open source product, with a subscription service targeted at business users.

Specification (The Research Component)

The main standards in the management of calendar events are RFC 5545 (.ics format) and RFC 4791 (CalDAV, or “ical feeds”). The problem with these standards is that they are not currently used to model calendar event data available from modern APIs. The equivalent objects available via the Eventbrite, Meetup and Zoom APIs do not translate to RFC 5545, or to each other. Attempts by industry bodies to develop an Abstract Calendaring API have yet to bear fruit, despite some recent attempts. Moreover, proprietary services do not provide group/site/community-wide CalDAV feeds (they sometimes provide user-specific feeds). In short, there is a significant paucity of calendar event data model standardisation.

The primary research component of the DEIP will be to specify an abstract event data model that implements the existing standardization attempts, while maintaining practical usability vis-a-vis the most popular proprietary event-related services (the “DEIP Specification”). This specification will then be converted into a working prototype (initially in Ruby; subsequently in other languages), allowing for the creation, reading, update and deletion of generic calendar events (the “DEIP Prototype”). Depending on the outcomes of this work, we may seek to package the DEIP Prototype for distribution via different package systems, e.g. ruby gems.

As well as forming the basis of the MVP (see below), the specification and prototype will be published on the DEIP landing page with accompanying explanations of the thinking behind it. We will also dedicate a section of our own community to it for further discussion. We want to be an active part of efforts to bring event software services closer to the use of standard data models to improve service interoperability and portability.

Development (The Development Component)

We will develop the DEIP Specification and Prototype into an MVP Discourse Plugin offering the following features:

  • Discourse Event API with Create, Read and Delete support. Update support (i.e. two-way communication) will be added in a later product version.
  • Specific support for popular services. Initially Eventbrite, Meetup and Zoom.
  • Integration with the Discourse Event Plugin to display events within Discourse topics and provide an Events Calendar within Discourse itself.
  • A CalDAV server to provide a unified feed of all events in a community, with the ability to filter by category and user.
  • Integration with the Legal Tools Plugin for GDPR support and the Locations Plugin for GeoJSON location mapping using open source mapping solutions.

Deployment (Relevance, impact and benefits)

Pavilion supports thousands of online communities through our paid consulting work and unpaid open source work, many of which have evinced a clear need for the DEIP Product, including university researchers, health support communities, hobbists, small businesses, neighbourhoods, startups, non-profits, Fortune-500 companies, fantasy novelists and nature photography enthusiasts. For a sampling of this need, see here, here, here, here, here, here and here. The lack of ease of event portability and integration is frequently a key factor in the choice between locked-in proprietary solutions like Facebook and open source solutions like Discourse.

Pavilion members will be personally deploying the DEIP Product for our existing clients who run events, as well as assisting the many open source users of our work, like those linked above. In addition to Pavilion’s work within the Discourse community, the DEIP will have:

Our goal is for the DEIP Product to be a viable alternative to event management on proprietary community platforms and for the DEIP Specification and Prototype to advance efforts in calendar event data model standardisation.

Business Model (Commercial Exploitation)

Pavilion has developed a subscription model for our open source Discourse plugins that maintains our commitments to open source and supporting non-profit communities, while ensuring our members get properly compensated for their work. The model has the following features

  • 100% open source code.
  • Selected “business” features that are not visible on the application client unless the community manager has purchased a subscription.
  • Free subscriptions for non-profit communities that use the “business” features.
  • Business-orientated services for paid subscribers.

Feature-restriction in a 100% open source code base can be programmatically overcome, however this is not relevant to the target market for paid subscriptions. Businesses want to pay for services that benefit them, and those that choose to overcome the restrictions are not the target customers for that aspect of the product.

We could potentially expand the scope of this project to include some of the other things you’ve mentioned, i.e. those focused on event features within Discourse itself, however we’d need additional funding. If you want to discuss this further you can PM me about it. In any event, I’ll be sharing more details about the DEIP project here on meta as we progress.

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