Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

⏳ Just a few hours left! 🔥

We're in the final stretch of the Bonfire crowdfund. Help unlock new features for community-run spaces in the #fediverse! Every share or contribution makes a real difference.

Support or boost before time runs out:
indiegogo.com/projects/bonfire…

Read about our groups stretch goal, to bring genuine community spaces to the fediverse:
bonfirenetworks.org/posts/why-…

Endless thanks to everyone who supported us already! Let’s show what open and caring federated networks can achieve! 💜🌱

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Radiopopolare festeggia i suoi 50 anni con un corteo dalla sua sede di via Ollearo alla Fabbrica del Vapore dove si inaugura una mostra fotografica sulla sua storia: radiopopolare.it/
Nelle immagini l'inizio e la conclusione del corteo

#RadioPopolare #Milano #informazione #corteo #antifascismo

@milano
@radiopopolare
@alephoto85
@filippodb

reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

La fine del mondo a fumetti: peertube.uno/w/3x2gU87V1AYiw1V…

Barbatrucco babbonatalizio per promuovere la rivista di fumetti che esce in edicola il 18 dicembre con il manifesto.

Creato con i software liberi Stirling PDF e Polymny studio e pubblicato su PeerTube

#fumetti #SoftwareLibero #LaFineDelMondo #ilmanifesto #PeerTube #letture

@maupao
@informapirata
@lindasartini
@alephoto85
@mauriziocarnago
@scuola
@luther
@maicolemirco

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

⚠️ Scam alert: if anyone ever asks you to "temporarily change" the email address on your Mastodon account, DO NOT DO THIS.

There is currently a scammer posing as a server admin telling people to temporarily change their Mastodon account's email to an address supplied by the scammer. This is a scam, don't do it.

Real admins will NEVER ask you to do this.

You can see examples of this scam in the thread at ohai.social/@redsad/1157080301…

(Thanks @markwyner for the warning about this! 🙏 )

#FediTips

Questa voce è stata modificata (6 mesi fa)
in reply to Fedi.Tips 🏳️‍🌈 🏳️‍⚧️

Not just for Mastodon, any service that uses email for resetting your password will have people trying this scam.

Don't fall for it anywhere.

And yes, a real admin will be able to change your email and password, etc on their own, so any time someone claiming to be an admin asks you to do that, it's a red flag.

Questa voce è stata modificata (6 mesi fa)
Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

⚠️ Attenzione alle truffe: se qualcuno ti chiede di "cambiare temporaneamente" l'indirizzo email del tuo account Mastodon, NON FARLO.

Il truffatore si spaccia per un amministratore di server e chiede agli utenti di cambiare temporaneamente l'indirizzo email del proprio account Mastodon con un indirizzo fornito dal truffatore stesso. Questa è una truffa, non fatelo.

I veri amministratori NON ti chiederanno MAI di farlo.

social.growyourown.services/@F…

@fediverso


⚠️ Scam alert: if anyone ever asks you to "temporarily change" the email address on your Mastodon account, DO NOT DO THIS.

There is currently a scammer posing as a server admin telling people to temporarily change their Mastodon account's email to an address supplied by the scammer. This is a scam, don't do it.

Real admins will NEVER ask you to do this.

You can see examples of this scam in the thread at ohai.social/@redsad/1157080301…

(Thanks @markwyner for the warning about this! 🙏 )

#FediTips


Unknown parent

mastodon - Collegamento all'originale

informapirata ⁂

@elettrona esattamente. Molte truffe Acquisiscono Maggiore credibilità in un ambiente meno referenziato e conosciuto globalmente come il Fediverso. Se le persone non riescono a gestire adeguatamente la propria sicurezza neanche in contesti consolidati, dobbiamo comprendere che in contesti nuovi sia ancora più difficile farlo

@fediverso @Meliodas

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Federation isn’t just a feature, it’s how we reject oppression by design.

In the EU, Big Centralised Tech is facing fines for selling verification and hiding ads. At Mastodon, we’re building something different: a space where no one buys influence and there simply aren't any ads.

Checks and balances are our foundation, and kindness is our compass. 🌈

A better web is possible - and it's powered by the people. Donate #SupportMastodon

joinmastodon.org/sponsors#dona…

in reply to Mastodon

glad to see some messages straight from the org itself, my experience with the fediverse has been a little nebulous so far but,

I just wanna say thank you so much for creating an alternative to corporate social media which plans on creating a future where entire populations can be exterminated, for profit, like the Palestinians, and no one will hear them scream.

That is quite seriously the world these people want for us and we will never be safe until they can no longer control

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

12 dicembre Una valigia piena di foto e documenti per ricordare la strage di piazza Fontana a Milano il 12 dicembre 1969 Installazione creata dall'ANPI di Cinisello Balsamo

#12dicembre1969 #PiazzaFontana #ANPI #antifascismo #CiniselloBalsamo #storia #memoria #Milano

@scuola
@wikimediaitalia
@Puntopanto
@lindasartini
@RFancio
@johannesBuckler

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Elon Musk and X are once again proving why institutions should never rely on corporate-owned, centrally-controlled social media platforms to reach their people.

bbc.com/news/articles/c0589g0d…

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

I'm getting a lot of "please use the Mastodon report function to tell us about the Russian disinformation accounts we are hosting".

With all due respect, if you have three or more, I'm not sitting here and clicking through each and every account to create a report, you're going to get a DM or an email.

Today I've spent five hours identifying, tracking, verifying, documenting, and reporting accounts.

Five hours.

If you take five minutes to review new accounts, I don't need to do this.

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

I've improved federation support for Lemmy and other servers that support FEP-1b12 Group Federation.

I had to increase the number of available file descriptors on my personal server 4x because of the resultant inbound volume of ActivityPub activities! I liked a federated post and DOSed my server.

#ktistec #activitypub #fediverse

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

L'introduzione nell'ultima versione di Calibre (calibre-ebook.com/it/whats-new) , il software opensource per la gestione degli ebook, di una funzione di IA sta già suscitando, giustamente, diverse polemiche, qui sotto la posizione dello sviluppatore e di alcuni utenti

mobileread.com/forums/showthre…

buc.ci/abucci/p/1765053767.148…

#Calibre #ebook #IA #AI #SoftwareLibero

@informapirata
@libri
@scuola
@alephoto85
@maupao

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

A volte il silenzio digitale non è vuoto: è respiro.
Ho scritto un nuovo pezzo su cosa significa disintossicarsi senza sparire e perché il Fediverso è meno tossico dei social veloci.

Link nei commenti

#fediverso #fediverse #neurodivergenza #neurodivergent #autismo #autism #michiyospace #digitaleconsapevole #digitalawareness

reshared this

in reply to Michela

michiyospace.altervista.org/un…
Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Several people asked if our artwork, such as the print we offer as a crowdfunding reward, is AI-generated.
It’s not.
It’s an original work by Rocco Lombardi, the artist behind the Bonfire icon and much of our other illustrations, hand screen-printed by BeeInk, a social print studio in Belluno, Italy.

Grab one and support the development of federated groups in Bonfire
indiegogo.com/projects/bonfire…

And it looks great on your wall too. Here’s @samvie print ❤️

reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

La fine del mondo sta arrivando (ed è a fumetti!)

Il 18 dicembre in edicola con il manifesto
troverete il numero zero del magazine a fumetti, ideato e curato da Maicol & Mirco.

Sarà un appuntamento mensile con i migliori nomi del fumetto italiano e internazionale.

Costa solo 4 euro più il prezzo del quotidiano.

#fumetti #ilmanifesto #letture #Maicol&Mirco #ComingSoon #RivisteDiCarta #BD

@lindasartini
@alephoto85
@mauriziocarnago
@luther
@maicolemirco

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

🚀 Il client mastodon Phanpy è aggiornato!

Ora è integrato anche il nostro servizio di traduzione LibreTranslate e di default punta sulla nostraistanza mastodon.uno.

Cosa aspettate a provarlo? 👉 phanpy.mastodon.uno/

Phanpy è un modo diverso e innovativo per navigare su #Mastodon con il browser!

Un grazie speciale a @magostinelli per l’incredibile lavoro nel portare #Phanpy in Italia. 🙌

:fediverso: Seguiteci e restate aggiornati sul Fediverso nel gruppo: @fediverso 🌐

#phanpy #mastodonUno

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Good news everyone! We hit our first milestone: maintenance is 100% funded. Thank you all ❤️

Next up: unlock the stretch goal to co‑design federated groups: community‑owned spaces to organise across the fediverse, with no server or platform lock‑in.

Read about why this matters and how it can empower communities: bonfirenetworks.org/posts/why-…

Support the campaign: indiegogo.com/projects/bonfire…

#Fediverse #FederatedGroups #CommunitySpaces #ActivityPub

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The Oxford Word of the Year is "rage bait" 🙁

In a world seemingly filled with "rage bait", we're building technology that lets you connect authentically. That's why we carefully designed consent-respecting Quote Posts. Free speech isn’t about giving hate a megaphone, it’s about protecting the voices that need it most.🛡️

Mastodon’s community-driven moderation proves we can foster open dialogue and safety, without algorithms or agendas.

Donate #SupportMastodon joinmastodon.org/sponsors#dona…

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Successfully imported a #Mastodon archive into my #Wordpress blog with #ActivityPub plugin's Importer. Yay! One down, two to go...
in reply to macfranc

@macfranc @notizie DL yr Masto archive as .zip. Install AP plugin to your WP. Tools>Import>Mastodon Importer(beta). en-gb.wordpress.org/plugins/ac…
in reply to The Void ザ・ヴォイド

@macfranc @notizie I've been helping to test/debug. You can read this thread about that if you like: wordpress.org/support/topic/im…
Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

I've just published version 2.85 of #snac, the simple, minimalistic #ActivityPub instance server written in C. It includes the following changes:

Quoted posts are now shown.

Added metadata to remote users in the people page (contributed by dandelions).

Fixed memory leak (contributed by dandelions).

Fixed user matching (contributed by rakoo).

Rendering visibility conditionally, with lesser reach if needed (contributed by byte).

Added a button next to a follow notification to follow back.

Fixed typo in man page (contributed by spky).

Updated Czech and German translations (contributed by pmjv and zen).

comam.es/what-is-snac

If you find #snac useful, please consider buying grunfink a coffee or contributing via LiberaPay.

#snacAnnounces #FrugalFediverse

La guida definitiva per rispondere a un post su Mastodon:

1) Inizia a scrivere una risposta impertinente, ma inizia a preoccuparti che venga fraintesa.
2) Scarta la risposta senza pubblicarla.
3) Inizia a scrivere una risposta sincera. Continua finché non avrai scritto un post di 5000 caratteri, composto da più paragrafi.
4) Scarta la risposta senza pubblicarla.
5) Inizia a scrivere una nuova risposta in cui cerchi di formulare il tuo post nel modo più succinto possibile.
6) Arrenditi e scarta la risposta senza pubblicarla.
9) Clicca semplicemente sul pulsante a forma di stella del post ⭐

Post originale di @Luftvaffel@Che succede nel Fediverso?


How to reply to a post on Fedi:

1. Begin writing a sassy reply, but start to worry that it will be misunderstood.
2. Discard reply without posting.
3. Start writing a sincere reply. Continue until you have written a 5000 character, multi paragraph screed.
4. Discard without posting.
5. Start a new reply where you try to phrase your screed as succinctly as possible.
5. Give up and discard without posting.
6. Just click the star button on the post instead ⭐

#fediverse


reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Ho aperto una stanza pubblica su Matrix dedicata agli aspetti tecnici del Fediverso 🛠️🌐

È pensata per admin, smanettoni, curiosə e chiunque voglia parlare di:

tutto ciò che riguarda il Fediverso,

self-hosting di istanze,

configurazioni, backup, sicurezza,

strumenti e buone pratiche tra admin e futuri admin.

Niente flame, niente politica del giorno, niente “il Fediverso sta diventando X”: solo confronto tecnico, domande, aiuto reciproco e condivisione di esperienza.

La stanza è aperta a tuttə gli interessati:
👉 link Matrix: matrix.to/#/#Feditecnica:searx…

Se ti va di imparare, aiutare o semplicemente lurkare per capire come funziona “dietro le quinte”, sei il benvenuto.

P.s. Presentatevi all'iscrizione.😉

#Fediverso #Matrix #SelfHosting

Questa voce è stata modificata (4 mesi fa)
in reply to 𝕊𝕟𝕠𝕨

La stanza tecnica su Matrix, fine della storia.

Vi ricordate il post precedente, quello in cui aprivo una stanza Matrix per parlare di Fediverso, self hosting, backup e buone pratiche tra admin…
Ecco, dopo quasi due mesi ho fatto il bilancio, con la freddezza di chi guarda i log e non le speranze.

Su 27 iscritti, tolto il sottoscritto e un paio di eccezioni, non scriveva praticamente nessuno.
Capita, eh. Però a quel punto tenere in piedi “l’ennesimo tentativo di dialogo” diventa più un atto di testardaggine che un servizio utile.

Quindi sì, chiuderò la room.

Non è un dramma, non è un addio, è solo manutenzione ordinaria della realtà… e delle risorse del server. 😄

Ci si vede nel Fediverso, oppure ci si incrocia comunque su Matrix, tanto il mio account sul mio server Matrix è già nel profilo di @snow
.

Grazie a chi è passato, a chi ha lurkato, e soprattutto a chi ha scritto anche solo una volta, perché nel Fediverso vale più un messaggio vero di cento “iscrizioni decorative”. 🚀

Questa voce è stata modificata (4 mesi fa)

reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Tumblr sospende l'integrazione con fediverso e il passaggio a WordPress

Tumblr sta abbandonando – o almeno sospendendo – il suo piano di migrazione a WordPress. Di conseguenza, ciò significa anche sospendere i piani di integrazione di Tumblr nel fediverso.

La notizia è stata diffusa lunedì sul podcast Decoder di The Verge . Automattic, proprietaria di Tumblr, aveva annunciato l'anno scorso di voler spostare il backend del suo sito web da Tumblr a WordPress. Ma il fondatore e CEO di Automattic, Matt Mullenweg, ha dichiarato a Decoder che l'idea era in sospeso perché l'azienda aveva deciso di "concentrarsi il più possibile sulle cose che sarebbero state visibili agli utenti e che gli utenti stavano chiedendo". Questo è coerente: cambiare il backend di un sito web è un'impresa importante, ma che non è immediatamente evidente alla maggior parte degli utenti.

mashable.com/article/tumblr-fe…

@fediverso

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Il Fediverso e la creazione di contenuti: la monetizzazione

"Certo, abbiamo sostituti open source e federati per Instagram, TikTok e YouTube. Come possiamo convincere i creatori a usare queste cose? Una considerazione riguarda la possibilità di pagare per le cose."

deadsuperhero.com/the-fedivers…

@fediverso

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

RE: mastodon.social/@_elena/115643…

We have been really happy to watch the #Plushtodon friends uniting with their brethren!


My #Plushtodon family just got bigger 🧡💛💙

Thank you @Mastodon @staff for creating such adorable, super soft plushies


reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Do you want to help people escape Big Tech and join the open social web? We need help to boost the Bonfire campaign. With #GivingTuesday momentum is on our side, but most people stuck on enshitified platforms only see content from people still active there.

If that's you, pick a template below (or write your own) and post it anywhere you have reach: Facebook (incl groups), LinkedIn, Twitter, email lists, Slack/Discord. Every share brings us closer to an open community‑governed internet. Thanks!

in reply to Moved to @bonfire@bonfire.cafe

2/2

Document with some examples posts you can share (feel free to customise!): hackmd.io/@mayel/ByB9Qvnbbg

Link to our crowdfunding campaign: indiegogo.com/projects/bonfire…

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Per ritornare ad avere un motore di ricerca che restituisce quello che realmente si cerca, senza AI, senza risultati sponsorizzati, senza manipolazione, c'è il meta-motore di ricerca open source SearXNG:

:opensource: searxng.devol.it

per installarlo su #Firefox, #Waterfox, #Librewolf c'è l'estensione dedicata:

<img class=" title=":firefox:"/> :librewolf: addons.mozilla.org/it/firefox/…

qua invece la guida a #SearXNG dei @devol:

:devol: newsletter.devol.it/guida-comp…

:lemmy: Pubblicato nel gruppo sicurezza: @sicurezza

Un server ActivityPub in un singolo file PHP? Ecco come fare... Il post di @tofeo

Qualsiasi programma per computer può essere progettato per essere eseguito da un singolo file, se la progettazione è abbastanza sbagliata! 🤣

Volevo creare il server #Fediverse più semplice possibile, che potesse essere utilizzato come strumento didattico per mostrare come funziona ActivityPub / Mastodon.

shkspr.mobi/blog/2024/02/activ…

@Che succede nel Fediverso?


ActivityPub Server in a Single PHP File


shkspr.mobi/blog/2024/02/activ…

Any computer program can be designed to run from a single file if you architect it wrong enough!

I wanted to create the simplest possible Fediverse server which can be used as an educational tool to show how ActivityPub / Mastodon works.

The design goals were:

  • Upload a single PHP file to the server.
  • No databases or separate config files.
  • Single Actor (i.e. not multi-user).
  • Allow the Actor to be followed.
  • Post plain-text messages to followers.
  • Be roughly standards compliant.

And those goals have all been met! Check it out on GitLab. I warn you though, it is the nadir of bad coding. There are no tests, bugger-all security, scalability isn't considered, and it is a mess. But it works.

You can follow the test user @[url=https://example.viii.fi/example]example@example.viii.fi[/url]

Architecture


Firstly, I've slightly cheated on my "single file" stipulation. There's an .htaccess file which turns example.com/whatever into example.com/index.php?path=whatever

The index.php file then takes that path and does stuff. It also contains all the configuration variables which is very bad practice.

Rather than using a database, it saves files to disk.

Again, this is not suitable for any real world use. This is an educational tool to help explain the basics of posting messages to the Fediverse. It requires absolutely no dependencies. You do not need to spin up a dockerised hypervisor to manage your node bundles and re-compile everything to WASM. Just FTP the file up to prod and you're done.

Walkthrough


This is a quick ramble through the code. It is reasonably well documented, I hope.

Preamble


This is where you set up your account's name and bio. You also need to provide a public/private keypair. The posting page is protected with a password that also needs to be set here.
PHP // Set up the Actor's information $username = rawurlencode("example"); // Encoded as it is often used as part of a URl $realName = "E. Xample. Jr."; $summary = "Some text about the user."; $server = $_SERVER["SERVER_NAME"]; // Domain name this is hosted on // Generate locally or from cryptotools.net/rsagen // Newlines must be replaced with "\n" $key_private = "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"; $key_public = "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"; // Password for sending messages $password = "P4ssW0rd";

Logging


ActivityPub is a "chatty" protocol. This takes all the requests your server receives and saves them in /logs/ as a datestamped text file.
PHP // Get all headers and requests sent to this server $headers = print_r( getallheaders(), true ); $postData = print_r( $_POST, true ); $getData = print_r( $_GET, true ); $filesData = print_r( $_FILES, true ); $body = json_decode( file_get_contents( "php://input" ), true ); $bodyData = print_r( $body, true ); $requestData = print_r( $_REQUEST, true ); $serverData = print_r( $_SERVER, true ); // Get the type of request - used in the log filename if ( isset( $body["type"] ) ) { $type = " " . $body["type"]; } else { $type = ""; } // Create a timestamp in ISO 8601 format for the filename $timestamp = date( "c" ); // Filename for the log $filename = "{$timestamp}{$type}.txt"; // Save headers and request data to the timestamped file in the logs directory if( ! is_dir( "logs" ) ) { mkdir( "logs"); } file_put_contents( "logs/{$filename}", "Headers: \n$headers \n\n" . "Body Data: \n$bodyData \n\n" . "POST Data: \n$postData \n\n" . "GET Data: \n$getData \n\n" . "Files Data: \n$filesData \n\n" . "Request Data:\n$requestData\n\n" . "Server Data: \n$serverData \n\n" );

Routing


The .htaccess changes /whatever to /?path=whateverThis runs the function of the path requested.
PHP !empty( $_GET["path"] ) ? $path = $_GET["path"] : die(); switch ($path) { case ".well-known/webfinger": webfinger(); case rawurldecode( $username ): username(); case "following": following(); case "followers": followers(); case "inbox": inbox(); case "write": write(); case "send": send(); default: die(); }

WebFinger


The WebFinger Protocol is used to identify accounts.It is requested with example.com/.well-known/webfinger?resource=acct:username@example.comThis server only has one user, so it ignores the query string and always returns the same details.
PHP function webfinger() { global $username, $server; $webfinger = array( "subject" => "acct:{$username}@{$server}", "links" => array( array( "rel" => "self", "type" => "application/activity+json", "href" => "https://{$server}/{$username}" ) ) ); header( "Content-Type: application/json" ); echo json_encode( $webfinger ); die(); }

Username


Requesting example.com/username returns a JSON document with the user's information.
PHP function username() { global $username, $realName, $summary, $server, $key_public; $user = array( "@context" => [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" ], "id" => "https://{$server}/{$username}", "type" => "Person", "following" => "https://{$server}/following", "followers" => "https://{$server}/followers", "inbox" => "https://{$server}/inbox", "preferredUsername" => rawurldecode($username), "name" => "{$realName}", "summary" => "{$summary}", "url" => "https://{$server}", "manuallyApprovesFollowers" => true, "discoverable" => true, "published" => "2024-02-12T11:51:00Z", "icon" => [ "type" => "Image", "mediaType" => "image/png", "url" => "https://{$server}/icon.png" ], "publicKey" => [ "id" => "https://{$server}/{$username}#main-key", "owner" => "https://{$server}/{$username}", "publicKeyPem" => $key_public ] ); header( "Content-Type: application/activity+json" ); echo json_encode( $user ); die(); }

Following & Followers


These JSON documents show how many users are following / followers-of this account.The information here is self-attested. So you can lie and use any number you want.
PHPfunction following() { global $server; $following = array( "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/following", "type" => "Collection", "totalItems" => 0, "items" => [] ); header( "Content-Type: application/activity+json" ); echo json_encode( $following ); die(); } function followers() { global $server; $followers = array( "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/followers", "type" => "Collection", "totalItems" => 0, "items" => [] ); header( "Content-Type: application/activity+json" ); echo json_encode( $followers ); die(); }

Inbox


The /inbox is the main server. It receives all requests. This server only responds to "Follow" requests.A remote server sends a follow request which is a JSON file saying who they are.This code does not cryptographically validate the headers of the received message.The name of the remote user's server is saved to a file so that future messages can be delivered to it.An accept request is cryptographically signed and POST'd back to the remote server.
PHP function inbox() { global $body, $server, $username, $key_private; // Get the message and type $inbox_message = $body; $inbox_type = $inbox_message["type"]; // This inbox only responds to follow requests if ( "Follow" != $inbox_type ) { die(); } // Get the parameters $inbox_id = $inbox_message["id"]; $inbox_actor = $inbox_message["actor"]; $inbox_host = parse_url( $inbox_actor, PHP_URL_HOST ); // Does this account have any followers? if( file_exists( "followers.json" ) ) { $followers_file = file_get_contents( "followers.json" ); $followers_json = json_decode( $followers_file, true ); } else { $followers_json = array(); } // Add user to list. Don't care about duplicate users, server is what's important $followers_json[$inbox_host]["users"][] = $inbox_actor; // Save the new followers file file_put_contents( "followers.json", print_r( json_encode( $followers_json ), true ) ); // Response Message ID // This isn't used for anything important so could just be a random number $guid = uuid(); // Create the Accept message $message = [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/{$guid}", "type" => "Accept", "actor" => "https://{$server}/{$username}", "object" => [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => $inbox_id, "type" => $inbox_type, "actor" => $inbox_actor, "object" => "https://{$server}/{$username}", ] ]; // The Accept is sent to the server of the user who requested the follow // TODO: The path doesn't *always* end with/inbox $host = $inbox_host; $path = parse_url( $inbox_actor, PHP_URL_PATH ) . "/inbox"; // Get the signed headers $headers = generate_signed_headers( $message, $host, $path ); // Specify the URL of the remote server's inbox // TODO: The path doesn't *always* end with /inbox $remoteServerUrl = $inbox_actor . "/inbox"; // POST the message and header to the requester's inbox $ch = curl_init( $remoteServerUrl ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($message) ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); $response = curl_exec( $ch ); // Check for errors if( curl_errno( $ch ) ) { file_put_contents( "error.txt", curl_error( $ch ) ); } curl_close($ch); die(); }

UUID


Every message sent should have a unique ID. This can be anything you like. Some servers use a random number.I prefer a date-sortable string.
PHP function uuid() { return sprintf( "%08x-%04x-%04x-%04x-%012x", time(), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffffffffffff) ); }

Signing Headers


Every message that your server sends needs to be cryptographically signed with your Private Key.This is a complicated process. Please read "How to make friends and verify requests" for more information.
PHP function generate_signed_headers( $message, $host, $path ) { global $server, $username, $key_private; // Encode the message to JSON $message_json = json_encode( $message ); // Location of the Public Key $keyId = "https://{$server}/{$username}#main-key"; // Generate signing variables $hash = hash( "sha256", $message_json, true ); $digest = base64_encode( $hash ); $date = date( "D, d M Y H:i:s \G\M\T" ); // Get the Private Key $signer = openssl_get_privatekey( $key_private ); // Sign the path, host, date, and digest $stringToSign = "(request-target): post $path\nhost: $host\ndate: $date\ndigest: SHA-256=$digest"; // The signing function returns the variable $signature // php.net/manual/en/function.ope… openssl_sign( $stringToSign, $signature, $signer, OPENSSL_ALGO_SHA256 ); // Encode the signature $signature_b64 = base64_encode( $signature ); // Full signature header $signature_header = 'keyId="' . $keyId . '",algorithm="rsa-sha256",headers="(request-target) host date digest",signature="' . $signature_b64 . '"'; // Header for POST reply $headers = array( "Host: {$host}", "Date: {$date}", "Digest: SHA-256={$digest}", "Signature: {$signature_header}", "Content-Type: application/activity+json", "Accept: application/activity+json", ); return $headers; }

User Interface for Writing


This creates a basic HTML form. Type in your message and your password. It then POSTs the data to the /send endpoint.
PHP function write() { // Display an HTML form for the user to enter a message.echo <<< HTML<![url=https://mastodon.social/users/doctype]Aleks Dorohovich[/url] html><html lang="en-GB"> <head> <meta charset="UTF-8"> <title>Send Message</title> <style> *{font-family:sans-serif;font-size:1.1em;} </style> </head> <body> <form action="/send" method="post" enctype="multipart/form-data"> <label for="content">Your message:</label><br> <textarea id="content" name="content" rows="5" cols="32"></textarea><br> <label for="password">Password</label><br> <input type="password" name="password" id="password" size="32"><br> <input type="submit" value="Post Message"> </form> </body></html>HTML; die(); }

Send Endpoint


This takes the submitted message and checks the password is correct.It reads the followers.json file and sends the message to every server that is following this account.
PHP function send() { global $password, $server, $username, $key_private; // Does the posted password match the stored password? if( $password != $_POST["password"] ) { die(); } // Get the posted content $content = $_POST["content"]; // Current time - ISO8601 $timestamp = date( "c" ); // Outgoing Message ID $guid = uuid(); // Construct the Note // contentMap is used to prevent unnecessary "translate this post" pop ups // hardcoded to English $note = [ "@context" => array( "https://www.w3.org/ns/activitystreams" ), "id" => "https://{$server}/posts/{$guid}.json", "type" => "Note", "published" => $timestamp, "attributedTo" => "https://{$server}/{$username}", "content" => $content, "contentMap" => ["en" => $content], "to" => ["https://www.w3.org/ns/activitystreams#Public"] ]; // Construct the Message $message = [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/posts/{$guid}.json", "type" => "Create", "actor" => "https://{$server}/{$username}", "to" => [ "https://www.w3.org/ns/activitystreams#Public" ], "cc" => [ "https://{$server}/followers" ], "object" => $note ]; // Create the context for the permalink $note = [ "@context" => "https://www.w3.org/ns/activitystreams", ...$note ]; // Save the permalink $note_json = json_encode( $note ); // Check for posts/ directory and create it if( ! is_dir( "posts" ) ) { mkdir( "posts"); } file_put_contents( "posts/{$guid}.json", print_r( $note_json, true ) ); // Read existing users and get their hosts $followers_file = file_get_contents( "followers.json" ); $followers_json = json_decode( $followers_file, true ); $hosts = array_keys( $followers_json ); // Prepare to use the multiple cURL handle $mh = curl_multi_init(); // Loop through all the severs of the followers // Each server needs its own cURL handle // Each POST to an inbox needs to be signed separately foreach ( $hosts as $host ) { $path = "/inbox"; // Get the signed headers $headers = generate_signed_headers( $message, $host, $path ); // Specify the URL of the remote server $remoteServerUrl = "https://{$host}{$path}"; // POST the message and header to the requester's inbox $ch = curl_init( $remoteServerUrl ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($message) ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); // Add the handle to the multi-handle curl_multi_add_handle( $mh, $ch ); } // Execute the multi-handle do { $status = curl_multi_exec( $mh, $active ); if ( $active ) { curl_multi_select( $mh ); } } while ( $active && $status == CURLM_OK ); // Close the multi-handle curl_multi_close( $mh ); // Render the JSON so the user can see the POST has worked header( "Location: https://{$server}/posts/{$guid}.json" ); die(); }

Next Steps


This is not intended to be used in production. Ever. But if you would like to contribute more simple examples of how the protocol works, please come and play on GitLab.

You can follow the test user @[url=https://example.viii.fi/example]example@example.viii.fi[/url]

#activitypub #mastodon #php


reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Big tech thrives on division. Mastodon thrives with you.

Here, you’ll find local journalists 📰, libraries 📚, and grassroots movements, all sharing space on their own terms. Stand with us for a social web that amplifies voices, not outrage.

Support us to keep Mastodon community-powered. ​Donate #SupportMastodon

joinmastodon.org/sponsors#dona…

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Bonfire isn’t easy to pin down, and that’s the point! We seek to enable a tapestry of social spaces, all built from shared building blocks but diverging in flavour, practice, and purpose.

We gathered a whole collection of answers from across the fediverse:
👉 bonfirenetworks.org/posts/what…

Want to help shape what comes next? Support and share the crowdfunding to join install parties, co-design sessions, and more:
👉 indiegogo.com/projects/bonfire…

#Fediverse #Plurality #OpenSocialWeb #Community

Questa voce è stata modificata (6 mesi fa)
in reply to Moved to @bonfire@bonfire.cafe

@petersuber One of the "app flavours" also has its own website, since flavours aren't just apps but also intended to be projects that have autonomous governance: openscience.network/
Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

We're happy to be in good company with other non-profits we admire, to work with WE AID to accept donations. blog.joinmastodon.org/2025/11/…
in reply to Mastodon

I've donated 50€ because I think it's important to support the project's nonprofit path.

However, the experience via WE AID felt pretty bad:
- no confirmation,
- direct Stripe debit with no documentation,
- I am honestly not sure my tax office will accept the Stripe IBAN as tax-deductible.

According to the FAQ, WE AID also keeps 10% of the donation. I’d strongly prefer a German IBAN to support Mastodon directly, with a proper receipt and full amount going to the project.

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

#UnplugTrump : 30 conseils pour se libérer numériquement de Trump et des GAFAM: kuketz-blog.de/unplugtrump-fre…

2 artistes allemandes se sont inspirés de la série #UnplugTrump pour composer une chanson punk rock impertinente: pekrieger.de/unplugtrump/
Écoutez-la, partagez-la et chantez-la 😀

#LogicielsLibres #NoGafam #Fediverse #PunkRock #Mastodon

@goofy
@casilli
@Framasoft
@eyssette
@cyrille
@alainmi11
@framaka
@Khrys
@kuketzblog
@Pe

Un anno nel Fediverso: la calma che ti cambia la testa. Il post di @Michela

E no, il Fediverso non è povero di contenuti.

È che, quando smetti di essere schiava degli algoritmi, ti accorgi che l’80% della roba mainstream è solo rumore dopaminico.
Rapido, inutile, martellante.

Su PixelFed, invece, quasi tutto merita almeno un rallentamento, uno sguardo vero.
È una sensazione precisa:
uscire da una distopia sociale senza neppure accorgersi di esserci vissuti dentro per anni.

michiyospace.altervista.org/un…

Per avere altri aggiornamenti sul Fediverso, segui il gruppo @Che succede nel Fediverso?

reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

Continuano ad arrivare nuovi particolari rispetto all'origine del pianete che - tramite una terribile collisione con la Terra, quando era molto giovane - diede luogo alla nostra Luna. Pare accertato ora che Teiha, il pianeta che ci è spudoratamente venuto addosso, provenisse dalle regioni interne del Sistema Solare.

Meno male che il quadro che ho delineato nel libro E tu Luna pubblicato a maggio viene ulteriormente confermato!

Ho scritto di come si è formata la Luna, ma anche di come ci siamo arrivati. E della musica, dei film, che gli abbiamo dedicato. Perché la Luna non smette di attrarci, di incantarci. Lo farà sempre, fino alla fine.

media.inaf.it/2025/11/24/regio…

#etuluna #luna #libri #astrocaffe

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Le piattaforme centralizzate piegano le conversazioni ai loro interessi.
Qui no.

#Mastodon rimette il controllo nelle tue mani.
Connessioni autentiche, comunità che decidono le proprie regole e una voce che non è in vendita.

Se vuoi un internet più libero, sicuro e indipendente, dai forza ai server, agli strumenti e alle comunità che rendono tutto questo possibile.

💛 Per Sostenere Mastodon.uno:
👉 liberapay.com/mastodonitalia

🌟 E seguici anche nel gruppo del fediverso italiano: @fediverso

Questa voce è stata modificata (7 mesi fa)
Unknown parent

chuckya - Collegamento all'originale

Altbot

Immagine di un disegno animato di un personaggio che sembra un cane con un binocolo e una palla galleggiante nello spazio.
Il personaggio è di colore marrone e sembra puntare un binocolo verso una palla verde brillante circondata da un anello e circondata da raggi di luce bianchi. Lo sfondo è blu scuro e contiene diversi pianeti rossi e blu. Il personaggio sembra essere posizionato in uno spazio vorticoso con forme nere curve che circondano il corpo. Non c'è testo nell'immagine.

Alt-text: Un personaggio di cane marrone con un binocolo guarda una palla verde circondata da un anello e raggi di luce in uno spazio blu scuro con pianeti rossi e blu. Il personaggio si trova in un ambiente vorticoso con forme nere curve. L'immagine è un cartone animato. Non c'è testo visibile nell'immagine.

Fornito da @altbot, generato localmente e privatamente utilizzando Gemma3:27b

🌱 Energia utilizzata: 0.149 Wh

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Centralised platforms shape the conversation to serve their interests.

Mastodon returns power to you. Here connections are authentic, communities set their own rules, and your voice isn’t for sale.

Help to power the servers, tools, and communities making Mastodon a safe, independent home for free expression. ​

Donate #SupportMastodon

joinmastodon.org/sponsors#dona…

Questa voce è stata modificata (7 mesi fa)
Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Come ogni anno Framasoft lancia la sua campagna di autofinanziamento:

framablog.org/2025/11/18/renfo…
chiedendo il nostro aiuto ed elencando i nuovi servizi liberi (date un'occhiata a Framatoolbox!) e i miglioramenti a quelli già esistenti realizzati durante l'anno.

Nell'ALT dell'immagine la traduzione italiana dell'incipit dell'articolo

#Framasoft #SoftwareLibero #BeniComuni #AlternativeDigitali #condivisione

@maupao
@scuola
@informapirata
@lealternative
@opensource @devol
@Framasoft

in reply to maupao

Ho visto che la pagina di Omnitools (omnitools.framatoolbox.org/) è in diverse lingue ma non in italiano, possiamo dare un'occhiata?

Per la traduzione usano un programma che non ho mai sentito nominare:locize.app/register
#traduzioni #Framasoft

reshared this

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

This is “The Mork & Mindy House” that was used in the 70’s comedy that launched Robin Williams’ career.

No visit to Boulder is complete without a walk past this icon. But the sign out front says that actual, living humans live there, so don’t be a jerk and let them live out their best na-noo na-noo’s in peace.

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

We're building something for the Fediverse. #Holos

ActivityPub running on your phone. Your own server, your data stored locally. A relay handles your stable identity when you're offline.

One account, all formats. Short text, long articles, photos, videos. The UI adapts to your mood. Switch between text mode, photo grid, video feed, article editor based on what you feel like sharing.

Same network, same followers.

Early stages, but the foundation is solid. We wanted to share the progress.

in reply to Fedilab Apps

Very exciting, will look forward to follow development updates at @HolosSocial.

This could dramatically lower the bar for owning your data, and for "self hosting" right in your pocket. It also raises the question of how end user friendly the relay server will be.

Are we talking a one-click install on commodity servers à la Wordpress, or something more involved like using Docker on a VPS? That will make a big difference in audience and adoption.

Poliverso - notizie dal Fediverso ⁂ ha ricondiviso questo.

My #ActivityPub developer guide moved to another repository: codeberg.org/silverpill/ap-nex…

It started as a FEP, but has evolved into something bigger.

About the repository:

As stated in the readme, ActivityPub Next is a project dedicated to evolving the ActivityPub protocol.

Currently it only contains the developer guide, but I think that more content will be added over time.