Nel 2024 stavo cercando lavoro. Ho deciso di offrire i miei servizi come consulente per le community. Per lo più, però, le persone erano interessate a supporto tecnico per risolvere o aggiornare i loro siti Discourse. Un potenziale cliente mi ha chiesto se potevo aggiungere un modulo di contatto per gli utenti senza account, in modo che potessero inviare feedback. Ho fatto delle ricerche e ho concluso che non era possibile. Ma avevo molto tempo libero e ho seguito il tutorial per sviluppatori di plugin per vedere cosa potevo fare. Alla fine ho sviluppato un plugin per il modulo di contatto e ho firmato il contratto con il cliente.[1]
Per chiarezza generale: non sono un programmatore frontend! Sono passati 13 anni da quando ero un programmatore professionista di qualsiasi tipo. So come creare un modulo HTML e questo è praticamente tutto ciò che so. Quindi ho faticato attraverso la sezione su Ember e Handlebars del tutorial e ho assemblato una soluzione di fortuna che funzionava abbastanza bene. Fortunatamente ero a mio agio con i sistemi di templating, avendoli già utilizzati in un lavoro precedente.
Ho trovato un lavoro presso la OpenSSL Foundation[2] e ho quasi abbandonato i miei clienti. Ma il cliente per cui avevo creato il plugin mi ha mantenuto in regime di consulenza perché apprezzava davvero il mio lavoro. (Ho svolto per lui diversi progetti non correlati.) Per guadagnare la mia consulenza, ho deciso di aggiornare il suo server Discourse. Ecco cosa ho visto:
Questo errore era presente solo sul sito del mio cliente perché ero stato stupido e avevo installato, ma non attivato, il plugin di contatto sul mio sito di staging. Quindi sono rapidamente entrato in modalità sicura e ho disattivato il plugin. Lo scorso weekend ho dedicato del tempo a capire cosa fosse andato storto e come potessi risolvere il problema per il mio cliente.
Dopo alcune ricerche, ho trovato Deprecazione dell’estensione .hbs nei temi e nei plugin:
Nell’ultima versione di Discourse, l’uso di file
.hbsnei temi e nei plugin è deprecato. Il supporto per questo formato di file verrà rimosso dopo il prossimo rilascio ESR.
Questo era a marzo, il che significa che avrei dovuto avere fino alla fine di settembre per risolverlo se fossi stato sul rilascio ESR. Ma la mia configurazione di Discourse usa “tests-passed”[3] e quindi ho ricevuto l’errore qualche mese prima, immagino.
Dato che dovevo comunque risolvere il problema (o deludere il mio cliente), mi sono tuffato nelle istruzioni: Aggiornamento automatico di temi e plugin al formato file .gjs. Il primo passo è stato installare un ambiente di sviluppo, dato che avevo cambiato laptop da l’ultima volta che ho provato.[4] Quando ho finalmente fatto funzionare Discourse e verificato che il mio plugin fosse rotto localmente, ho eseguito il processo di 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)
Sebbene sia fastidioso dover modificare il mio plugin, almeno il processo di lint mi ha aiutato a ripulire e modernizzare il mio codice. Tuttavia, lo script automatizzato si è bloccato tentando di convertire in .gjs. Quindi ho deciso di provare https://ask.discourse.com/
Ho 12 domande lì. Non le condiviserei con un umano perché sono solo i rantoli di un programmatore sempre più frustrato. A un certo punto il bot ha suggerito un “approccio moderno più robusto” per uno dei miei sottoproblemi che includeva… un file .js e un file .hbs.
So perché succede questo. È addestrato sulle discussioni di Meta Discourse e ci sono ancora molti post con codice Handlebars, incluso la parte due del tutorial ufficiale per sviluppatori di plugin. Quelle cose verranno aggiornate nel tempo, ma mi preoccupa che ci vorrà un po’ più di tempo perché il consiglio ufficiale per ottenere aiuto con l’aggiornamento è di chiedere al chatbot invece di chiedere su Meta Discourse.
Immagino non dovrei lamentarmi; mi ha comunque aiutato a ordinare il mio codice e probabilmente con meno attrito rispetto a chiedere agli umani.
Stabilità della piattaforma
Quindi ora lavoro per la OpenSSL Foundation. Probabilmente conosci OpenSSL a causa di Heartbleed. È usato ovunque. La versione più popolare da scaricare è la 1.1.1 che ha raggiunto la fine del supporto nel 2023. La successiva più popolare è la 3.0, rilasciata nel 2021, ma è ancora supportata come rilascio a lungo termine (LTS). La successiva è la 3.5, che è il nostro ultimo LTS. Questi tre rilasci rappresentano quasi 2/3 dei download da GitHub.
È un po’ deludente perché la 3.5 ha alcune nuove funzionalità interessanti. Ma alla fine le funzionalità a cui le persone tengono di più sono una combinazione di SSL/TLS e primitive crittografiche. A meno che tu non sia entusiasta degli algoritmi crittografici post-quantistici, rimanderai il più possibile il dolore dell’aggiornamento.
OpenSSL è molto più in basso nello stack rispetto a Discourse, ovviamente. Ma il principio è lo stesso. A meno che non ci sia una nuova funzionalità, le persone non sono interessate ad aggiornamenti che rompono la compatibilità. So che voi tutti siete entusiasti delle nuove funzionalità aggiunte a Discourse. Capisco il desiderio di cambiare un’API per ottenere alcune ottimizzazioni in seguito. Mi preoccupa solo che muoversi troppo velocemente possa danneggiare Discourse come piattaforma su cui vengono costruite le community.
A proposito, c’è una presentazione davvero utile chiamata Gardening Platforms scritta da Alex Komoroske. La diapositiva 90 inizia una sezione chiamata “Piattaforma + Ecosistema” che spiega come le piattaforme devono co-evolvere con i loro ecosistemi. In questo caso, Discourse è la piattaforma che supporta un ecosistema di progettisti di plugin e temi, servizi di hosting, la community Meta Discourse e persino le community costruite su Discourse. Un’importante intuizione nelle note del relatore dalla diapositiva 98:
Ma non sono indipendenti; sono legati simbioticamente.
Le azioni che accadono in uno influenzano l’altro e viceversa. Pensaci come a cicli di feedback che li collegano in entrambe le direzioni.
Non sono rigidamente legati insieme, è più come un elastico che li unisce. È una forza gravitazionale.
Se una piattaforma e un ecosistema si muovono troppo velocemente l’uno rispetto all’altro, il legame si spezza con effetti disastrosi. Mi fido che Discourse farà la cosa giusta nei confronti dell’ecosistema. È solo che per me, weekend come quello scorso, sembrano minare questa fiducia.
Sono moderatamente orgoglioso del mio lavoro, anche se alla fine si è trattato di un sito piuttosto statico. ↩︎
Presagio! ↩︎
Anche questo deve essere aggiornato ↩︎
Redis e Rails sono stati più difficili da installare di quanto ricordassi. ↩︎
Non prima di aver passato molto tempo a cercare di scaricare
eslint.config.mjs, però ↩︎

