В 2024 году я искал работу. Я решил предложить свои услуги в качестве консультанта по сообществам. Однако чаще всего люди интересовались технической помощью в исправлении или обновлении своих сайтов на Discourse. Один потенциальный клиент спросил, могу ли я добавить форму обратной связи для пользователей без аккаунта. Я изучил вопрос и пришёл к выводу, что это невозможно. Но у меня было много свободного времени, и я последовал руководству для разработчиков плагинов, чтобы посмотреть, что я могу сделать. В конце концов я разработал плагин формы обратной связи и подписал клиента.[1]
Давайте сразу проясним: я не фронтенд-программист! Прошло 13 лет с тех пор, как я работал профессиональным программистом любого рода. Я умею создавать HTML-формы, и это практически предел моих знаний. Поэтому я с трудом справлялся с разделом про Ember и Handlebars в руководстве и собрал кое-как работающее решение. К счастью, я был знаком с системами шаблонов, так как использовал их на предыдущей работе.
Я устроился на работу в Фонд OpenSSL[2] и в основном отказался от своих клиентов. Но клиент, для которого я написал плагин, оставил меня на ретейнере, потому что очень ценил мою работу. (Я выполнил для него несколько не связанных друг с другом проектов.) Чтобы оправдать ретейнер, я решил обновить его сервер Discourse. Вот что я увидел:
Это отображалось только на сайте моего клиента, потому что я был глуп и установил, но не активировал плагин обратной связи на моем тестовом сайте. Поэтому я быстро перешел в безопасный режим и отключил плагин. В прошлые выходные я потратил время на то, чтобы разобраться, что пошло не так, и как я могу это исправить для своего клиента.
После некоторых поисков я нашел тему Устаревание расширения файлов .hbs в темах и плагинах:
В последней версии Discourse использование файлов .hbs в темах и плагинах устарело. Поддержка этого формата файлов будет удалена после следующего релиза ESR.
Это было в марте, и это означало, что у меня было время до конца сентября, чтобы исправить это, если бы я использовал релиз ESR. Но моя конфигурация Discourse использует “tests-passed”[3], поэтому, видимо, я получил ошибку на несколько месяцев раньше.
Поскольку мне все равно придется это исправить (или подвести клиента), я приступил к инструкциям: Автоматическое обновление тем и плагинов до формата файлов .gjs. Первым шагом было установка среды разработки, так как я сменил ноутбук с тех пор, как в последний раз пробовал это сделать.[4] Когда я наконец запустил Discourse и убедился, что мой плагин сломан локально, я запустил процесс линтинга[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)
Хотя менять плагин раздражает, по крайней мере процесс линтинга помог мне очистить и модернизировать код. Однако автоматический скрипт не справился с конвертацией в .gjs. Поэтому я решил попробовать https://ask.discourse.com/
У меня там 12 вопросов. Я бы не поделился ими с человеком, потому что это просто отчаянные попытки все более разочарованного программиста. В какой-то момент бот предложил «более надежный современный подход» к одной из моих подзадач, который включал… .js файл и .hbs файл.
Я понимаю, почему это происходит. Он обучен на обсуждениях Meta Discourse, и там до сих пор много постов с кодом на Handlebars, включая вторую часть официального руководства для разработчиков плагинов. Это со временем обновится, но я беспокоюсь, что это займет немного больше времени, потому что официальный совет по получению помощи при обновлении — обращаться к чат-боту, а не задавать вопросы на Meta Discourse.
Думаю, мне не стоит жаловаться; это помогло мне разобраться в коде, вероятно, с меньшими трудностями, чем если бы я обращался к людям.
Стабильность платформы
Итак, я теперь работаю в Фонде OpenSSL. Вы, наверное, знаете об OpenSSL из-за Heartbleed. Он используется повсеместно. Самая популярная версия для скачивания — 1.1.1, которая достигла конца срока поддержки в 2023 году. Следующая по популярности — 3.0, выпущенная в 2021 году, но все еще поддерживаемая как релиз с долгосрочной поддержкой (LTS). Далее идет 3.5 — наш последний LTS. Эти три версии составляют почти 2/3 загрузок с GitHub.
Это немного разочаровывает, потому что в 3.5 есть несколько крутых новых функций. Но в конечном итоге функции, которые людям важнее всего, — это какая-то комбинация SSL/TLS и криптографических примитивов. Если вас не волнуют постквантовые криптографические алгоритмы, вы будете откладывать болезненное обновление как можно дольше.
Конечно, OpenSSL находится намного ниже в стеке, чем Discourse. Но принцип тот же. Если нет новой функции, людям не интересны разрушительные обновления. Я знаю, что вы рады новым функциям, добавленным в Discourse. Я понимаю желание изменить API ради последующей оптимизации. Я просто беспокоюсь, что слишком быстрое движение навредит Discourse как платформе, на которой строятся сообщества.
Кстати, есть очень полезная презентация под названием Gardening Platforms, написанная Алексом Комороске. Слайд 90 начинает раздел под названием «Платформа + Экосистема», который объясняет, как платформы должны совместно развиваться со своими экосистемами. В данном случае Discourse — это платформа, поддерживающая экосистему разработчиков плагинов и тем, хостинг-сервисов, сообщества Meta Discourse и даже самих сообществ, созданных на Discourse. Важное замечание в заметках спикера к слайду 98:
Но они не независимы; они связаны симбиотически.
Действия, происходящие в одной, влияют на другую, и наоборот. Представьте это как петли обратной связи, связывающие их в обоих направлениях.
Они не жестко связаны, это скорее как резинка, связывающая их. Это гравитационное притяжение.
Если платформа и экосистема движутся слишком быстро друг относительно друга, связь разрывается с катастрофическими последствиями. Я доверяю Discourse поступать правильно по отношению к экосистеме. Просто в прошлые выходные мне показалось, что это доверие пошатнулось.}
Я довольно горжусь своей работой, даже несмотря на то, что в итоге это оказался довольно статичный сайт. ↩︎
Намеки! ↩︎
Установка Redis и Rails оказалась сложнее, чем я помнил. ↩︎
Не без того, чтобы потратить много времени на неудачные попытки скачать
eslint.config.mjs, однако ↩︎

