Em 2024, eu estava em busca de trabalho. Decidi oferecer meus serviços como consultor de comunidades. No entanto, a maioria das pessoas estava mais interessada em ajuda técnica para corrigir ou atualizar seus sites Discourse. Um cliente em potencial perguntou se eu poderia adicionar um formulário de contato para que pessoas sem conta pudessem enviar feedback. Pesquisei e concluí que isso não era possível. Mas eu tinha bastante tempo livre e segui o tutorial de desenvolvedor de plugins para ver o que eu poderia fazer. Eventualmente, desenvolvi um plugin de formulário de contato e fechei o contrato com o cliente.[1]
Apenas para deixar claro para todos: eu não sou um programador de front-end! Faz 13 anos que não trabalho como programador profissional de qualquer tipo. Sei como criar um formulário HTML e isso é praticamente tudo o que sei. Então, lutei para entender a seção sobre Ember e Handlebars do tutorial e montei uma solução improvisada que funcionou bem o suficiente. Felizmente, eu estava familiarizado com sistemas de template, tendo os usado em um emprego anterior.
Consegui um emprego na Fundação OpenSSL[2] e praticamente abandonei meus clientes. Mas o cliente para quem criei o plugin me manteve em regime de retenção porque realmente apreciava meu trabalho. (Já fiz vários projetos sem relação para ele.) Para justificar minha retenção, decidi atualizar o servidor Discourse dele. Foi isso que encontrei:
Isso só apareceu no site do meu cliente porque fui burro e instalei, mas não ativei, o plugin de contato no meu site de staging. Então, rapidamente entrei no modo seguro e desativei o plugin. No último fim de semana, passei algum tempo descobrindo o que deu errado e como poderia corrigir isso para meu cliente.
Após algumas buscas, encontrei o tópico Descontinuando a extensão de arquivo .hbs em temas e plugins:
Na versão mais recente do Discourse, o uso de arquivos
.hbsem temas e plugins está descontinuado. O suporte a esse formato de arquivo será removido após o próximo lançamento ESR.
Isso foi em março, o que significa que eu deveria ter tido até basicamente o final de setembro para corrigir, se estivesse na versão ESR. Mas minha configuração do Discourse usa “tests-passed”[3], então recebi o erro alguns meses antes, imagino.
Como vou ter que corrigir de qualquer forma (ou decepcionar meu cliente), mergulhei nas instruções: Atualização automática de temas e plugins para o formato de arquivo .gjs. A primeira etapa foi instalar um ambiente de desenvolvimento, já que troquei de laptop desde a última vez que tentei isso.[4] Quando finalmente consegui executar o Discourse e verifiquei que meu plugin estava quebrado localmente, executei o processo de lint[5]:
$ pnpm eslint --fix .
/Users/jericson/src/discourse-contact-plugin/assets/javascripts/discourse/components/contact-form.js
1:8 error Use Glimmer components(@glimmer/component) instead of classic components(@ember/component) ember/no-classic-components
3:16 error Native JS classes should be used instead of classic classes ember/no-classic-classes
3:16 error Please switch to a tagless component by setting `tagName: ''` or converting to a Glimmer component ember/require-tagless-components
20:3 error Use the @action decorator instead of declaring an actions hash ember/no-actions-hash
✖ 4 problems (4 errors, 0 warnings)
Embora seja irritante ter que alterar meu plugin, pelo menos o processo de lint me ajudou a limpar e modernizar meu código. No entanto, o script automatizado falhou ao tentar converter para .gjs. Então, decidi experimentar https://ask.discourse.com/
Tenho 12 perguntas lá. Eu não compartilharia com um humano porque são apenas as lamentações de um programador cada vez mais frustrado. Em um momento, o bot sugeriu uma “abordagem moderna mais robusta” para um dos meus subproblemas que incluía… um arquivo .js e um arquivo .hbs.
Sei por que isso acontece. O bot é treinado em discussões do Meta Discourse e ainda há muitos posts com código Handlebars, incluindo a parte dois do tutorial oficial de desenvolvedor de plugins. Isso será atualizado com o tempo, mas me preocupa que leve um pouco mais de tempo porque o conselho oficial para obter ajuda com a atualização é perguntar ao chatbot em vez de perguntar no Meta Discourse.
Acho que não deveria reclamar; ele me ajudou a organizar meu código e provavelmente com menos atrito do que perguntar a humanos.
Estabilidade da plataforma
Então, agora trabalho para a Fundação OpenSSL. Você provavelmente conhece a OpenSSL por causa do Heartbleed. É usada em todo lugar. A versão mais popular para baixar é a 1.1.1, que atingiu o fim da vida útil em 2023. A próxima mais popular é a 3.0, lançada em 2021, mas ainda é suportada como uma versão de Suporte de Longo Prazo (LTS). Em seguida, temos a 3.5, nossa mais recente LTS. Essas três versões representam quase 2/3 dos downloads do GitHub.
Isso é um pouco decepcionante porque a 3.5 tem alguns recursos novos legais. Mas, no final, os recursos que as pessoas mais se importam são uma combinação de SSL/TLS e primitivas criptográficas. A menos que você esteja animado com algoritmos criptográficos pós-quânticos, você vai adiar a dor de atualizar o máximo possível.
O OpenSSL está muito mais abaixo na pilha do que o Discourse, claro. Mas o princípio é o mesmo. A menos que haja um novo recurso, as pessoas não estão interessadas em atualizações que quebram funcionalidades. Sei que vocês estão animados com os novos recursos que foram adicionados ao Discourse. Entendo querer alterar uma API para obter algumas otimizações depois. Só me preocupo que mudar muito rápido prejudique o Discourse como plataforma na qual comunidades são construídas.
Falando nisso, há um slide deck muito útil chamado Gardening Platforms, escrito por Alex Komoroske. O slide 90 inicia uma seção chamada “Plataforma + Ecossistema” que explica como as plataformas devem coevoluir com seus ecossistemas. Neste caso, o Discourse é a plataforma que suporta um ecossistema de designers de plugins e temas, serviços de hospedagem, a comunidade Meta Discourse e até mesmo as comunidades construídas no Discourse. Uma percepção importante nas anotações do palestrante do slide 98:
Mas eles não são independentes; eles estão relacionados simbioticamente.
Ações que acontecem em um influenciam o outro, e vice-versa. Pense nisso como loops de feedback conectando-os em ambas as direções.
Eles não estão rigidamente ligados; é mais como um elástico ligando-os. É uma atração gravitacional.
Se uma plataforma e um ecossistema se movem muito rápido em relação um ao outro, o vínculo se rompe com efeitos desastrosos. Confio que o Discourse fará o certo pelo ecossistema. É só que, para mim, fins de semana como o último enfraqueceram essa confiança.
Estou moderadamente orgulhoso do meu trabalho, mesmo que tenha acabado sendo um site bastante estático. ↩︎
Presságio! ↩︎
Isso também precisa ser atualizado ↩︎
Redis e Rails foram mais difíceis de instalar do que eu lembrava. ↩︎
Não antes de gastar muito tempo tentando baixar
eslint.config.mjs, no entanto ↩︎

