Viene creato un argomento con un link nel primo post - per iniziare, rileva un singolo link nel primo post o un URL incollato nel titolo.
Opzionale: per evitare spam banali, attendi la prima risposta o abilita un’impostazione del sito.
Esamina la pagina per vedere se WebMention è supportato.
Viene inviato un commento WebMention con il testo "Questa pagina è in discussione su =SITE\u005fDOMAIN=: "=TITLE=" =TOPIC\u005fLINK= =CATEGORY_AND_TAGS=" (utilizzando il default_locale del sito).
Il sito riceve il WebMention (potenzialmente delegando a fed.brid.gy, applicando anti spam, ecc.) e alla fine lo visualizza come un commento.
L’attore (l’“autore” del commento) assumerebbe l’icona del sito di alta qualità o l’avatar @system, e il nome breve del forum.
Solo una nota a margine: non l’ho menzionato nel post ma il protocollo supporta l’invio di like e repost come cittadini di prima classe, come le risposte, sarebbe bello se discourse implementasse anche quello
Pavilion ha presentato una domanda a NLnet per 40.000 Euro per aggiungere il supporto alla federazione a Discourse (vedi sotto). È stata respinta e alla fine abbiamo fatto domanda (e siamo stati accettati) per DAPSI invece.
Un aggiornamento. Pavilion e CDCK (Discourse.org) stanno discutendo la creazione di un plugin ActivityPub per Discourse. Dopo alcune discussioni, siamo giunti alla specifica sottostante. Qualsiasi commento o suggerimento è benvenuto prima di finalizzarla. Si noti che
Il supporto per i contenuti in entrata (ad es. post su Mastodon, ecc. importati in Discourse) è intenzionalmente escluso. Sarà possibile aggiungerlo in una versione successiva.
Il supporto per seguire gli utenti (a differenza delle categorie) è anch’esso intenzionalmente escluso. Sarebbe anche possibile aggiungerlo in una versione successiva.
Pavilion costruirà il plugin MVP (ci lavorerò io) e CDCK lo gestirà e ospiterà (ovvero, sarà un plugin CDCK, non un plugin Pavilion).
Panoramica
Un plugin ActivityPub (AP) per Discourse.
L’obiettivo del plugin è un’implementazione MVP delle specifiche ActivityPub, ActivityVocab e ActivityStreams in Discourse con un’integrazione dimostrata della funzionalità MVP per una piattaforma conforme ad AP, ovvero Mastodon. Per quanto possibile, l’implementazione sarà costruita per supportare ulteriormente i protocolli e qualsiasi estensione.
Questa specifica riguarda l’abilitazione del supporto AP su base per categoria, dove solo il primo post di ogni topic in una categoria abilitata per AP viene federato (“solo primo post”).
Utenti
L’utilizzo del plugin sarà documentato in modo completo su meta in un topic del plugin.
Utente Normale
Si iscrive (o “segue”) una categoria Discourse abilitata alla federazione (FDC) su Mastodon (o qualsiasi altro servizio fediverso) utilizzando l’handle della categoria, ad es. @announcements@meta.discourse.org.
Vede un estratto del primo post di tutti i topic FDC (pubblicati dopo l’iscrizione) nel proprio feed Mastodon, ognuno con un link al topic associato, ad es. “Discuti sul nostro forum”.
Qualsiasi azione relativa al post su Mastodon non appare in Discourse.
Qualsiasi azione relativa al post in Discourse non appare su Mastodon.
Gli estratti dei post federati possono essere controllati dall’autore del post utilizzando markup simile a quello utilizzato per controllare gli estratti dei topic, ad es. <div>{text}</div>
Amministratore
Abilita la federazione su base per categoria utilizzando un’impostazione della categoria. La federazione può essere abilitata solo in categorie visibili a “tutti” su istanze pubbliche.
Imposta il nome utente federato della categoria tramite l’interfaccia utente delle impostazioni della categoria (non può essere modificato).
Imposta elenchi di domini consentiti e negati tramite le impostazioni del sito da cui l’attività viene automaticamente accettata o rifiutata.
Imposta un “blocco” di nomi utente federati da includere in un Oggetto/i di blocco nella casella di posta in uscita del server.
Imposta la lunghezza massima dei caratteri di una nota federata utilizzando un’impostazione del sito, ad es. activitypub_note_excerpt_maxlength.
Imposta il testo associato al link incluso nel primo post di un topic Discourse federato in “Personalizza > Testo”.
Imposta se il link di ritorno (e il testo) al forum è incluso nei post federati su base per categoria.
Aggiunge una coppia di chiavi tramite le impostazioni del sito per firmare i contenuti federati.
Tecnico
Il plugin includerà test completi (unitari / di integrazione e test js).
La categoria è un Attore ActivityPub automatizzato all’interno di Discourse (come un Gruppo ActorType). Il preferredUsername federato viene impostato dall’amministratore quando abilita la federazione e memorizzato in un campo personalizzato della categoria. Il nome federato (noto anche come nome visualizzato) è il full_name della categoria.
Gli utenti sono Attori nel contenuto federato dall’Attore della categoria. Il preferredUsername federato è il nome utente Discourse dell’utente al momento della federazione. Il preferredUsername di un utente è memorizzato in un campo personalizzato dell’utente nel caso in cui l’utente cambi il proprio nome utente Discourse. Il nome federato (noto anche come nome visualizzato) è il nome Discourse dell’utente.
In generale, gli oggetti ActivityPub saranno associati ai loro oggetti Discourse equivalenti utilizzando campi personalizzati ove appropriato (ad es. ID oggetto o attore) e nuove tabelle ove appropriato (ad es. inbox e outbox).
L’attività principale di ActivityPub da implementare è Follow e le attività e i modelli associati necessari per implementarla, ovvero inbox, outbox e Azioni e Collezioni associate richieste.
I post di Discourse verrebbero federati come Note di ActivityStream, con il contenuto come HTML.
L’autenticazione verrà gestita utilizzando firme HTTP, vedere qui e qui. Tutte le altre Considerazioni sulla sicurezza nella specifica ActivityPub saranno affrontate come appropriato.
Gli endpoint di federazione saranno protetti come appropriato per la specifica, ovvero assicurarsi che redirect_to_login_if_required venga utilizzato nei controller, aggiungere guardian per il permesso che la categoria sia visibile a tutti.
Sono davvero entusiasta di questa notizia! Grazie! Inoltre, sono contento che tu stia iniziando con un’implementazione iniziale semplice invece di cercare di affrontare l’elefante metaforico (non un riferimento obliquo a Mastodon). Esito a suggerire di aggiungere qualcosa, ma dato che chiedi suggerimenti, uno che spero richieda un lavoro insignificante in più:\n\n[quote="Angus McLeod, post:87, topic:90921, username:angus"]\nMostra un estratto del primo post di tutti gli argomenti FDC\n[/quote]\n\nCosa ne penseresti di pubblicare opzionalmente anche estratti delle risposte, utilizzando inReplyTo per metterli in thread? Penso che questo metterebbe in risalto il dialogo che avviene su Discourse e sarebbe più invitante; insieme a "Discuti sul nostro forum" mi aspetterei che vedere la conversazione portasse più persone.\n\n
Il problema con la federazione delle risposte in questa fase è che potresti creare aspettative di interazione che non verranno soddisfatte finché non avrai un supporto adeguato. È importante mantenere chiare le aspettative degli utenti in questo senso. Mentre alcuni utenti potrebbero comprendere le limitazioni relative a tali risposte federate, altri potrebbero non farlo. L’altro problema è quello di cercare di ridurre il numero di sfide tecniche da affrontare contemporaneamente.
Detto questo, abbiamo già preso in considerazione un’estensione “intero argomento” alla specifica “solo primo post” che vedi sopra. Ho condiviso alcune delle note tecniche per dare un’idea di dove questo potrebbe portare. Sottolineerei che l’estensione “intero argomento” non fa parte della specifica iniziale ed è solo una possibilità in questa fase.
Estensione intero argomento
Le Note in arrivo verrebbero pubblicate come nuovi argomenti o risposte (utilizzando inReplyTo o Replies).
I filtri di sicurezza e antispam di Discourse verranno applicati agli oggetti in arrivo al meglio delle nostre capacità utilizzando Accept / Reject objects.
I post delle note verranno attribuiti a un utente temporaneo associato all’ID dell’attore tramite un campo personalizzato. Ciò richiederà una variazione del concetto di utente temporaneo non basata su email, poiché l’utente non avrà un’email reale (un segnaposto può essere generato utilizzando l’ID dell’attore federato e preferredUsername).
L’associazione di utenti temporanei di ActivityPub con utenti standard di Discourse sarebbe possibile, ma non è attualmente inclusa in alcuna parte di questa specifica. Questo è un problema di “identità federata” e delle sue soluzioni associate.
I post federati non supporterebbero le @menzioni federate, o qualsiasi altra cosa in questo senso al di fuori delle specifiche principali di ActivityPub/Stream. Il supporto per tali funzionalità potrebbe essere aggiunto in versioni successive, ad esempio utilizzando Webfinger, seguendo Mastodon.
La chiave in questa prima versione è concentrarsi sull’implementazione minima vitale. Una volta posta questa base, una federazione completa (o più completa), potenzialmente in linea con quelle note sull’“intero argomento”, sarà più fattibile. Sottolineerei tuttavia che la direzione del plugin sarà determinata da CDCK. Qualsiasi cosa menzioni qui sono solo modi possibili su cui la specifica di base potrebbe essere costruita.
Alcuni dei post e delle discussioni in corso dal Fediverse:
PS. Vorrei anche menzionare che sono stato contattato da Daniël Klabbers, sviluppatore principale di Flarum, nel novembre dello scorso anno, il quale mi ha detto che stavano lavorando a un’estensione ActivityPub. Non conosco lo stato attuale, ma potrebbe essere utile se tutti i progetti nel dominio dei Forum collaborassero per ottenere la massima interoperabilità possibile nello spazio.
Riguardo a tale interoperabilità, vorrei anche segnalare il processo di Fediverse Enhancement Proposal (FEP), il FEP su Codeberg:
Qui, ad esempio, Lemmy ha recentemente finalizzato un FEP per i Gruppi ActivityPub. Le discussioni si svolgono su SocialHub all’indirizzo:
(Il processo FEP sta prendendo slancio con la crescita del Fediverse ed è attualmente il posto migliore per standardizzare i meccanismi di protocollo)
Grazie @aschrijver, molto utile! Mi concentrerò personalmente sull’implementazione MVP specificata sopra, lavorando a stretto contatto con CDCK. Nella concisa frase di @mcdanlj, è fondamentale che tale sforzo non tenti di “inghiottire l’elefante”. Siamo desiderosi di ricevere qualsiasi feedback costruttivo sulla specifica, in particolare sul fronte tecnico.
Vorrei aggiungere, tuttavia, che altri due membri di Pavilion@nmeyne (un veterano della comunità SSI; in particolare credenziali verificabili) e @merefield stanno anche lavorando in questo spazio e sono interessati ad alcune delle questioni più ampie che hai sollevato.
A titolo di esempio di fraintendimenti reali derivanti da un’illusione di fedeltà, uno dei problemi che abbiamo riscontrato sui Forum Maker, dove abbiamo importato molte community di Google+ quando Google+ è scomparso, è che l’importazione è stata sufficientemente fedele che i nuovi arrivati sul sito non si rendono conto che stanno cercando di interagire con altri utenti che non sono (ancora) arrivati sul sito da Google+, e quindi abbiamo una risposta standard per far loro sapere che la persona con cui stanno cercando di parlare non è lì per rispondere loro.
Grazie per aver fornito i dettagli sull’idea di “estensione dell’intero argomento”.
Nel caso in cui questo venga aggiunto in futuro… fwiw, mi piace molto l’approccio che Pterotype per Wordpress offriva, ovvero che qualsiasi commento federato viene inoltrato direttamente alla moderazione / approvazione del gruppo prima di essere pubblicato nuovamente sull’argomento originale del forum come risposta.
Nel caso di un forum, questo potrebbe essere un compito più adatto ai tipi TL4 / TL3 piuttosto che allo staff.
Personalmente ho trovato che questo si dimostra particolarmente utile nel prevenire risposte fuori tema / in stile social media che sovrastano l’argomento di discussione originale.
Sì, l’uso della coda di revisione è qualcosa di cui abbiamo discusso per i contenuti in arrivo. Come noti, questa è una cosa da considerare se e quando ci arriveremo (non nella prima versione).
Solo una nota che le questioni amministrative relative a questo lavoro sono state risolte, quindi la prossima settimana inizierò a lavorare sulla specifica. Qualsiasi ulteriore feedback tecnico o nota sulla specifica è benvenuto.
Ci vorranno alcuni mesi perché questo si concretizzi, quindi abbiate pazienza.
Se un post viene eliminato in Discourse, è possibile inviare un’azione Delete ai follower?
Sui Maker Forums, abbiamo abbastanza “punti Google” da ricevere molti spammer SEO. Abbiamo permessi relativamente rilassati per i nuovi utenti perché una forma comune di nuovo utilizzo è una persona frustrata che cerca aiuto pertinente al sito, e questo ci aiuta ad aiutarli più velocemente. Ma ciò significa che gli spammer tendono a pubblicare un post di spam e poi viene relativamente rapidamente contrassegnato come spam, rimosso dall’elenco ed eliminato.
Mi piacerebbe che quei post federati venissero eliminati e che l’eliminazione venisse pubblicata tramite Delete in modo da ripulire lo spam dalle cache federate. È forse nel campo di applicazione?
Potrebbe essere utile in questo caso se ci fosse un ritardo per la federazione, di un certo numero di ore, per consentire la gestione dello spam prima della federazione. (Forse applicare il ritardo solo ai primi post di utenti relativamente nuovi?)
Prevedo che faremo questo nell’MVP per il tipo di ragioni che menzioni. Ne discuterò ulteriormente con le persone di Discourse al momento opportuno.
Suggerimento utile. La federazione sarà sicuramente asincrona. Come viene impostato e gestito il ritardo è qualcosa che dovremo affrontare in qualche modo nell’MVP.
Suggerimenti specifici come questo per l’MVP, in particolare basati su casi d’uso precedenti o competenze tecniche di dominio, sono i più graditi.
Se non è un lavoro significativamente maggiore all’inizio, sarebbe utile anche federare le modifiche ai post come Attività Update. Se è una di quelle cose che possono essere aggiunte dopo l’MVP, allora un design che consenta ragionevolmente di aggiungerla in seguito sarebbe ottimo.
Per quello che vale, imposterei il ritardo basso sulla mia istanza/e. Non avrei intenzione di usarlo per evitare di federare post di spam, perché sarebbe ragionevolmente probabile un segnale che porta un moderatore dal suo feed fediverse nel nostro Discourse per agire. Ho impostato chat_integration_delay_seconds a 20 per modifiche rapide di refusi e mi aspetterei di fare qualcosa di simile qui. Almeno, tale impostazione crea un precedente per un tale ritardo.
Un breve aggiornamento! Siamo a un mese dallo sviluppo e, a grandi linee, ora abbiamo le seguenti funzionalità funzionanti:
Le persone possono seguire categorie con ActivityPub abilitato
Il primo post degli argomenti nelle categorie abilitate per ActivityPub viene federato ai follower
Ci sono anche una serie di elementi più piccoli, ma non vale la pena approfondirli in questa fase. Ci sarà almeno un altro mese di sviluppo prima di iniziare i test interni.