commit e528b4714b26ee189e010961b188b0874f02b9de Author: pezcurrel Date: Sun Dec 1 09:07:45 2019 +0100 Ristrutturazione directory diff --git a/README.md b/README.md new file mode 100644 index 0000000..b9ddf71 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Progetto per un sito di introduzione a mastodon ([vedi il pad su cisti](https://pad.cisti.org/p/uhXFbSxe5EaMPE4syEKI)) che dia inoltre la possibilità di scegliere un'istanza in base a vari criteri, da una base di istanze sufficientemente occhei. diff --git a/crawler/bidablock.txt b/crawler/bidablock.txt new file mode 100644 index 0000000..8501f53 --- /dev/null +++ b/crawler/bidablock.txt @@ -0,0 +1,40 @@ +## Istanze silenziate e sospese in Mastodon.bida.im + +| Istanza | Stato | Motivo | +|----------|:-------------:|------:| +|toot.love|Silenziata|| +|switter.at|Silenziata|https://mastodon.bida.im/@jops/101404791975700441| +|freezepeach.xyz|Sospesa|| +|ediot.social|Sospesa|| +|anitwitter.com|Sospesa|| +|gs.smuglo.li|Sospesa|| +|pawoo.net|Sospesa|| +|unsafe.space|Sospesa|| +|woofer.alfter.us|Sospesa|| +|preteengirls.biz|Sospesa|| +|shitposter.club|Silenziata|| +|social.heldscal.la|Sospesa|| +|gorf.club|Sospesa|| +|sealion.club|Silenziata|| +|baraag.net|Sospesa|| +|social.imirhil.fr|Sospesa|| +|wrongthink.net|Sospesa|| +|porntoot.com|Silenziata|| +|anitwitter.moe|Sospesa|| +|social.targaryen.house|Silenziata|| +|noagendasocial.com|Silenziata|| +|social.au2pb.net|Sospesa|| +|ika.moe|Sospesa|| +|newjack.city|Sospesa|| +|pl.smuglo.li|Sospesa|| +|freespeechextremist.com|Sospesa|| +|babymetal.party|Sospesa|| +|mobile.co|Sospesa|https://mastodon.bida.im/@Ca_Gi/101355947506820592| +|mastodon.starrevolution.org|Sospesa|https://a.nom.pl/notice/450131| +|humblr.social|Silenziata|https://mastodon.bida.im/@cirku17/101399587014096355| +|quodverum.com|Sospesa|https://mastodon.bida.im/@Ca_Gi/101514801964087604| +|neckbeard.xyz|Sospesa|Instance suspended: neckbeard.xyz - anime nazi shit, irony bro admin| +|social.quodverum.com|Sospesa|Razzisti| +|freespeech.firedragonstudios.com|Sospesa|https://mastodon.bida.im/@Ca_Gi/101344114624456297| +|shitposter.club|Sospesa|https://mastodon.bida.im/@Ca_Gi/101270762003908554| +|bsd.moe|Sospesa|https://mastodon.bida.im/@Ca_Gi/101270762003908554| diff --git a/crawler/crawler.ini b/crawler/crawler.ini new file mode 100644 index 0000000..d15f4a6 --- /dev/null +++ b/crawler/crawler.ini @@ -0,0 +1,6 @@ +excludeafter=2592000 +sistersfp=istanzesorelle +dontloadbl=0 +timeout=5 +biglistfp=listona.json +prodlistfp=listina.json diff --git a/crawler/crawler.php b/crawler/crawler.php new file mode 100755 index 0000000..7e4e5ff --- /dev/null +++ b/crawler/crawler.php @@ -0,0 +1,282 @@ +#!/bin/php +. +*/ + +define('N',"\n"); + +$inifp='crawler.ini'; + +$help='DESCRIZIONE + Questo script prende una lista di istanze mastodon sorellate, ciascuna + con (o anche senza, però sarebbe meglio con) una relativa lista di + istanze da essa bloccate, e genera una lista delle istanze note alle + istanze sorellate, escludendone quelle bloccate - più, al momento, + quelle il cui endpoint [istanza]/api/v1/instance non risponde, e quelle + che hanno chiusa la registrazione di nuovi utenti. +SINTASSI + crawler.php [opzioni] +OPZIONI + -i, --inifp + Imposta il file di configurazione (per default "'.$inifp.'"). + Tutte le altre opzioni, che siano specificate prima o dopo questa, + hanno la precedenza su quelle definite nel file di configurazione. + -t, --timeout + Imposta il timeout delle richieste http. + -e, --excludeafter + Imposta il lasso di tempo (in secondi) dopo il quale un\'istanza che + non si identifica (il cui endpoint [istanza]/api/v1/instance non + risponde) viene eliminata dal listone di tutte le istanze testate. + -b, --biglistfp + Imposta il file da cui leggere le istanze già testate in passato (se + non è specificata l\'opzione "-d", vedi sotto) e in cui scrivere + il listone di tutte le istanze testate. + -p, --prodlistfp + Imposta il file in cui scrivere la lista delle istanze occhei. + -s, --sistersfp + Imposta il file da cui leggere le istanze sorelle e le relative liste + di istanze sospese-silenziate. + -d, --dontloadbl + Evita di caricare il listone delle istanze già testate in passato. + -h, --help + Mostra questo aiuto ed esce. + + This program comes with ABSOLUTELY NO WARRANTY; for details see + the source. + This is free software, and you are welcome to redistribute it under + certain conditions; see for details.'.N; + +function mexit($msg,$code) { + echo($msg); + exit($code); +} + +$opts=array( + 'excludeafter'=>60*60*24*30, + 'sistersfp'=>'istanzesorelle', + 'dontloadbl'=>0, + 'timeout'=>5, + 'biglistfp'=>'listona.json', + 'prodlistfp'=>'listina.json' +); + +for ($i=1; $i<$argc; $i++) { + if ($argv[$i]=='-i' || $argv[$i]=='--inifp') { + if ($i+1>=$argc || $argv[$i+1]=='') + mexit('L’opzione «'.$argv[$i].'» richiede di specificare un file di configurazione (usa «-h» per vedere la guida).'.N,1); + $i++; + $inifp=$argv[$i]; + if (!file_exists($inifp) || !is_file($inifp) || !is_readable($inifp)) + mexit('"'.$inifp.'" non esiste, non è un file o non è leggibile.'.N,1); + } +} + +if (file_exists($inifp)) { + $buf=@parse_ini_file($inifp); + if ($buf!==false) { + foreach ($buf as $key=>$val) { + if (array_key_exists($key,$opts)) + $opts[$key]=$val; + } + } else { + echo('Attenzione: non ho potuto leggere la configurazione dal file "'.$inifp.'", potrebbe essere non leggibile o corrotto.'.N); + } +} +$f=@fopen($inifp,'w'); +if ($f!==false) { + foreach ($opts as $key=>$val) + fwrite($f,$key.'='.$val.N); + fclose($f); +} else { + echo('Attenzione: non ho potuto salvare la configurazione nel file "'.$inifp.'".'.N); +} + +for ($i=1; $i<$argc; $i++) { + if (substr($argv[$i],0,1)=='-') { + switch($argv[$i]) { + case '-i': + case '--inifp': + $i++; + break; + case '-e': + case '--excludeafter': + if ($i+1>=$argc || preg_match('/^[0-9]+$/',$argv[$i+1])!==1) + mexit('L’opzione «'.$argv[$i].'» richiede un parametro numerico intero (usa «-h» per vedere la guida).'.N,1); + $i++; + $opts['excludeafter']=$argv[$i]; + break; + case '-t': + case '--timeout': + if ($i+1>=$argc || preg_match('/^[0-9]+$/',$argv[$i+1])!==1) + mexit('L’opzione «'.$argv[$i].'» richiede un parametro numerico intero (usa «-h» per vedere la guida).'.N,1); + $i++; + $opts['timeout']=$argv[$i]; + break; + case '-b': + case '--biglistfp': + if ($i+1>=$argc || $argv[$i+1]=='') + mexit('L’opzione «'.$argv[$i].'» richiede un parametro di tipo file (usa «-h» per vedere la guida).'.N,1); + $i++; + $opts['biglistfp']=$argv[$i]; + break; + case '-p': + case '--biglistfp': + if ($i+1>=$argc || $argv[$i+1]=='') + mexit('L’opzione «'.$argv[$i].'» richiede un parametro di tipo file (usa «-h» per vedere la guida).'.N,1); + $i++; + $opts['biglistfp']=$argv[$i]; + break; + case '-s': + case '--sistersfp': + if ($i+1>=$argc || $argv[$i+1]=='') + mexit('L’opzione «'.$argv[$i].'» richiede un parametro di tipo file (usa «-h» per vedere la guida).'.N,1); + $i++; + $opts['sistersfp']=$argv[$i]; + break; + case '-d': + case '--dontloadbl': + $opts['dontloadbl']=1; + break; + case '-h': + case '--help': + mexit($help,1); + break; + default: + mexit('Opzione "'.$argv[$i].'" sconosciuta (usa «-h» per vedere la guida).'.N,1); + break; + } + } else { + mexit('Opzione "'.$argv[$i].'" sconosciuta (usa «-h» per vedere la guida).'.N,1); + } +} + +$sisters=array(); +echo('Carico il file delle istanze sorelle ("'.$opts['sistersfp'].'") ... '); +$buf=@file_get_contents($opts['sistersfp']); +if ($buf!==false) { + echo('OK :-)'.N); + $buf=explode(N,$buf); + foreach ($buf as $val) { + if ($val!='' && $val{0}!='#') { + $kv=explode('|',$val); + if ($kv[1]=='') $kv[1]=NULL; + $sisters[$kv[0]]=$kv[1]; + } + } +} else { + mexit(N.'Non ho potuto aprire il file delle istanze sorelle "'.$opts['sistersfp'].'", muoio.'.N,1); +} +if (count($sisters)<1) + mexit('Il file delle istanze sorelle "'.$opts['sistersfp'].'" non contiene alcuna voce, muoio.'.N,1); + +$biglist=array(); + +if ($opts['dontloadbl']==0) { + if (file_exists($opts['biglistfp']) && is_file($opts['biglistfp']) && is_readable($opts['biglistfp'])) { + echo('Carico la listona pre-esistente ("'.$opts['biglistfp'].'") ... '); + $buf=@file_get_contents($opts['biglistfp']); + if ($buf!==false) { + echo('OK :-)'.N); + $biglist=json_decode($buf,true); + } else { + echo('ERRORE :-('.N); + } + } +} + +$context=stream_context_create(array('http'=>array('timeout'=>$opts['timeout']))); + +$blinstances=array(); +foreach ($sisters as $dom=>$bluri) { + if (!is_null($bluri)) { + echo('Recupero la lista delle istanze bloccate da "'.$dom.'" ("'.$bluri.'") ... '); + $f=@fopen($bluri,'r',false,$context); + if ($f!==false) { +// le prime 4 righe non ci interessano + for ($i=0; $i<4; $i++) + fgets($f); + while (!feof($f)) { + $lin=fgets($f); + if (preg_match('/^\|([^\|]*)\|([^\|]*)\|([^\|]*)\|$/',$lin,$buf)===1) + $blinstances[]=$buf[1]; + } + fclose($f); + echo('OK :-)'.N); + } else { + echo('ERRORE :-('.N); + } + } else { + echo('NON recupero la lista delle istanze bloccate da "'.$dom.'": la url della stessa non è definita.'.N); + } +} +ksort($blinstances); + +foreach ($sisters as $dom=>$bluri) { + echo('Recupero la lista delle istanze note a "'.$dom.'" ... '); + $buf=@file_get_contents('https://'.$dom.'/api/v1/instance/peers',false,$context); + if ($buf!==false) { + echo('OK :-)'.N); + $peers=json_decode($buf,true); + foreach ($peers as $pdom) { + if (!in_array($pdom,$blinstances) && !array_key_exists($pdom,$biglist)) { + $biglist[$pdom]=NULL; + } + } + } else { + echo('ERRORE :-('.N); + } +} +ksort($biglist); + +$prodlist=array(); +$i=0; +$qinst=count($biglist); +foreach ($biglist as $dom=>$oinfo) { + echo('Recupero le informazioni su "'.$dom.'" ('.($i+1).'/'.$qinst.' - '.round(100/$qinst*$i).'%) ... '); + $buf=@file_get_contents('https://'.$dom.'/api/v1/instance',false,$context); + if ($buf!==false) { + echo('OK :-)'.N); + $info=json_decode($buf,true); + $info['cr-last_checked']=time(); + $info['cr-was_ok']=true; + $biglist[$dom]=$info; + if (!array_key_exists('registrations',$info) || $info['registrations']==true) { + $prodlist[$dom]=$info; + echo('"'.$dom.'" aggiunta alla lista delle istanze ok! :-)'.N); + } + } else { + echo('ERRORE :-( ... '); + if (is_null($oinfo) || time()-$oinfo['cr-last_checked']<=$opts['excludeafter']) { + echo('ma riproveremo...'.N); + $oinfo['cr-last_checked']=time(); + $oinfo['cr-was_ok']=false; + $biglist[$dom]=$oinfo; + } else { + echo('e non riproveremo...'.N); + } + } + $i++; +} + +$json=json_encode($biglist,JSON_PRETTY_PRINT); +file_put_contents($opts['biglistfp'],$json); +$json=json_encode($prodlist,JSON_PRETTY_PRINT); +file_put_contents($opts['prodlistfp'],$json); + +echo('Totale istanze nella listona: '.count($biglist).N); +echo('Totale istanze nella listina di quelle occhei: '.count($prodlist).N); + +?> diff --git a/crawler/istanzesorelle b/crawler/istanzesorelle new file mode 100644 index 0000000..995366a --- /dev/null +++ b/crawler/istanzesorelle @@ -0,0 +1,5 @@ +mastodon.bida.im|https://git.lattuga.net/bida/suspended-silenced-instances/raw/master/README.md +mastodon.cisti.org| +nebbia.fail| +stereodon.social| +snapj.saja.freemyip.com| diff --git a/domain_blocks_dump/domain_blocks_dump.sh b/domain_blocks_dump/domain_blocks_dump.sh new file mode 100755 index 0000000..2ad3a3e --- /dev/null +++ b/domain_blocks_dump/domain_blocks_dump.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +MASTHOME='/var/lib/mastodon' +MASTENVFP="$MASTHOME/live/.env.production" +DOMBLOCKSFP="$MASTHOME/live/public/domain_blocks.txt" + +HELP="SINTASSI + domain_blocks_dump.sh [opzioni] +DESCRIZIONE + Questo script rimedia all'attuale mancanza, in mastodon, di un endpoint + dell'API che ritorni una lista dei domini bloccati da un'istanza in un + formato univoco e parsabile. Legge i dati necessari alla connessione al + db di mastodon dal file di configurazione di mastodon, esegue tramite + psql una query sulla tabella domain_blocks e ne salva i risultati in un + file di testo pubblicamente accessibile + (da https://[dominio]/domain_blocks.txt). + È pensato per essere eseguito periodicamente da un cron job. +OPZIONI + -H, --home + Definisce la home di mastodon (per default \"$MASTHOME\") + e di conseguenza la posizione del suo file di configurazione + (per default \"$MASTENVFP\") e del file in cui scrivere la + -h, --help + Mostra questo aiuto ed esce." + +args=("$@") +i=0 +while [ $i -lt ${#args[@]} ]; do + if [ "${args[$i]:0:1}" == "-" ]; then + case "${args[$i]}" in + "-H" | "--home" ) + if [ -z "${args[$i+1]}" ] || [ ! -d "${args[$i+1]}" ]; then + echo "L'opzione \"${args[$i]}\" richiede un parametro di tipo directory (usa \"-h\" per l'aiuto)." + exit 1 + else + ((i++)) + MASTHOME=$(echo "${args[$i]}" | sed -e 's/\/$//') + fi + ;; + "-h" | "--help" ) + echo "$HELP" + exit 0 + ;; + *) + echo "\"${args[$i]}\": opzione sconosciuta (usa \"-h\" per l'aiuto)." + exit 1 + ;; + esac + else + echo "\"${args[$i]}\": opzione sconosciuta (usa \"-h\" per l'aiuto)." + exit 1 + fi + ((i++)) +done + +MASTENVFP="$MASTHOME/live/.env.production" +[ ! -e "$MASTENVFP" ] && echo "\"$MASTENVFP\" non esiste, muoio (usa \"-h\" per l'aiuto)." && exit 1 +[ ! -f "$MASTENVFP" ] && echo "\"$MASTENVFP\" non è un file, muoio (usa \"-h\" per l'aiuto)." && exit 1 +[ ! -r "$MASTENVFP" ] && echo "\"$MASTENVFP\" non è leggibile, muoio (usa \"-h\" per l'aiuto)." && exit 1 + +DOMBLOCKSFP="$MASTHOME/live/public/domain_blocks.txt" +touch "$DOMBLOCKSFP" 2>/dev/null +[ ! $? -eq 0 ] && echo "Non ho potuto creare/modificare il file \"$DOMBLOCKSFP\", muoio (usa \"-h\" per l'aiuto)." && exit 1 + +DB_HOST=`cat "$MASTENVFP"|grep 'DB_HOST'|sed -e 's/[^=]*=//'` +DB_PORT=`cat "$MASTENVFP"|grep 'DB_PORT'|sed -e 's/[^=]*=//'` +DB_NAME=`cat "$MASTENVFP"|grep 'DB_NAME'|sed -e 's/[^=]*=//'` +DB_USER=`cat "$MASTENVFP"|grep 'DB_USER'|sed -e 's/[^=]*=//'` +DB_PASS=`cat "$MASTENVFP"|grep 'DB_PASS'|sed -e 's/[^=]*=//'` + +echo "# generato $(date -u)" > "$DOMBLOCKSFP" +echo "# formato di output: dominio bloccato|data ultima modifica blocco|tipo blocco|commento pubblico" >> "$DOMBLOCKSFP" +echo "# \"tipo blocco\" può essere 0=silenziato, 1=sospeso, 2=nessuno (solo, eventualmente, file media e rapporti)" >> "$DOMBLOCKSFP" + +PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -c 'SELECT domain, updated_at, severity, public_comment FROM domain_blocks' -A -t >> "$DOMBLOCKSFP" diff --git a/web/.htaccess b/web/.htaccess new file mode 100644 index 0000000..1d663b9 --- /dev/null +++ b/web/.htaccess @@ -0,0 +1,4 @@ +RewriteEngine on +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^.*$ index.php [L,QSA] diff --git a/web/404.php b/web/404.php new file mode 100644 index 0000000..f585ae0 --- /dev/null +++ b/web/404.php @@ -0,0 +1,5 @@ + diff --git a/web/favicon.ico b/web/favicon.ico new file mode 100644 index 0000000..79000c9 Binary files /dev/null and b/web/favicon.ico differ diff --git a/web/fonts/titillium-bold-webfont.woff b/web/fonts/titillium-bold-webfont.woff new file mode 100644 index 0000000..df445ce Binary files /dev/null and b/web/fonts/titillium-bold-webfont.woff differ diff --git a/web/fonts/titillium-bolditalic-webfont.woff b/web/fonts/titillium-bolditalic-webfont.woff new file mode 100644 index 0000000..465809c Binary files /dev/null and b/web/fonts/titillium-bolditalic-webfont.woff differ diff --git a/web/fonts/titillium-regular-webfont.woff b/web/fonts/titillium-regular-webfont.woff new file mode 100644 index 0000000..4c97ffe Binary files /dev/null and b/web/fonts/titillium-regular-webfont.woff differ diff --git a/web/fonts/titillium-regularitalic-webfont.woff b/web/fonts/titillium-regularitalic-webfont.woff new file mode 100644 index 0000000..db419b8 Binary files /dev/null and b/web/fonts/titillium-regularitalic-webfont.woff differ diff --git a/web/home_en.php b/web/home_en.php new file mode 100644 index 0000000..7117083 --- /dev/null +++ b/web/home_en.php @@ -0,0 +1,5 @@ + diff --git a/web/home_it.php b/web/home_it.php new file mode 100644 index 0000000..ae77ade --- /dev/null +++ b/web/home_it.php @@ -0,0 +1,5 @@ + diff --git a/web/imgs/404.gif b/web/imgs/404.gif new file mode 100644 index 0000000..ad19c4e Binary files /dev/null and b/web/imgs/404.gif differ diff --git a/web/imgs/BridgingMastodonAndTwitter.png b/web/imgs/BridgingMastodonAndTwitter.png new file mode 100644 index 0000000..143d4a8 Binary files /dev/null and b/web/imgs/BridgingMastodonAndTwitter.png differ diff --git a/web/imgs/ContactCa_Gi.jpg b/web/imgs/ContactCa_Gi.jpg new file mode 100644 index 0000000..9623346 Binary files /dev/null and b/web/imgs/ContactCa_Gi.jpg differ diff --git a/web/imgs/ContactPongrebio.png b/web/imgs/ContactPongrebio.png new file mode 100644 index 0000000..c3489fc Binary files /dev/null and b/web/imgs/ContactPongrebio.png differ diff --git a/web/imgs/Echo_chambers-Streuli_Silvan.png b/web/imgs/Echo_chambers-Streuli_Silvan.png new file mode 100644 index 0000000..0c0a312 Binary files /dev/null and b/web/imgs/Echo_chambers-Streuli_Silvan.png differ diff --git a/web/imgs/Fediverse-Galaxy.jpg b/web/imgs/Fediverse-Galaxy.jpg new file mode 100644 index 0000000..2718f64 Binary files /dev/null and b/web/imgs/Fediverse-Galaxy.jpg differ diff --git a/web/imgs/LinkingAToot.png b/web/imgs/LinkingAToot.png new file mode 100644 index 0000000..9269e03 Binary files /dev/null and b/web/imgs/LinkingAToot.png differ diff --git a/web/imgs/MastodonOnDesktop.png b/web/imgs/MastodonOnDesktop.png new file mode 100644 index 0000000..52cc7d6 Binary files /dev/null and b/web/imgs/MastodonOnDesktop.png differ diff --git a/web/imgs/MastodonOnSmartphones.png b/web/imgs/MastodonOnSmartphones.png new file mode 100644 index 0000000..8be9c6a Binary files /dev/null and b/web/imgs/MastodonOnSmartphones.png differ diff --git a/web/imgs/MovingToAnotherInstance.png b/web/imgs/MovingToAnotherInstance.png new file mode 100644 index 0000000..1f9c9c1 Binary files /dev/null and b/web/imgs/MovingToAnotherInstance.png differ diff --git a/web/imgs/ObscuredFollowersList.png b/web/imgs/ObscuredFollowersList.png new file mode 100644 index 0000000..67b3046 Binary files /dev/null and b/web/imgs/ObscuredFollowersList.png differ diff --git a/web/imgs/Peer1.png b/web/imgs/Peer1.png new file mode 100644 index 0000000..380baa2 Binary files /dev/null and b/web/imgs/Peer1.png differ diff --git a/web/imgs/Peer2.png b/web/imgs/Peer2.png new file mode 100644 index 0000000..e23e9c6 Binary files /dev/null and b/web/imgs/Peer2.png differ diff --git a/web/imgs/Peer3.png b/web/imgs/Peer3.png new file mode 100644 index 0000000..b3d91b3 Binary files /dev/null and b/web/imgs/Peer3.png differ diff --git a/web/imgs/Peer4.png b/web/imgs/Peer4.png new file mode 100644 index 0000000..9055743 Binary files /dev/null and b/web/imgs/Peer4.png differ diff --git a/web/imgs/Peer5.png b/web/imgs/Peer5.png new file mode 100644 index 0000000..40fb7c3 Binary files /dev/null and b/web/imgs/Peer5.png differ diff --git a/web/imgs/Peer6.png b/web/imgs/Peer6.png new file mode 100644 index 0000000..07d046d Binary files /dev/null and b/web/imgs/Peer6.png differ diff --git a/web/imgs/Peer7.png b/web/imgs/Peer7.png new file mode 100644 index 0000000..2e4fa1b Binary files /dev/null and b/web/imgs/Peer7.png differ diff --git a/web/imgs/RunningAnInstance.jpg b/web/imgs/RunningAnInstance.jpg new file mode 100644 index 0000000..ff3aec9 Binary files /dev/null and b/web/imgs/RunningAnInstance.jpg differ diff --git a/web/imgs/SearchingThings.png b/web/imgs/SearchingThings.png new file mode 100644 index 0000000..b85694a Binary files /dev/null and b/web/imgs/SearchingThings.png differ diff --git a/web/imgs/ThreeTimelines.png b/web/imgs/ThreeTimelines.png new file mode 100644 index 0000000..c05316a Binary files /dev/null and b/web/imgs/ThreeTimelines.png differ diff --git a/web/imgs/TrendingTopics.png b/web/imgs/TrendingTopics.png new file mode 100644 index 0000000..8cb9e8f Binary files /dev/null and b/web/imgs/TrendingTopics.png differ diff --git a/web/imgs/WhoOwnsMastodon.jpg b/web/imgs/WhoOwnsMastodon.jpg new file mode 100644 index 0000000..96aa5bc Binary files /dev/null and b/web/imgs/WhoOwnsMastodon.jpg differ diff --git a/web/imgs/elephant_throwing_cs_logo.png b/web/imgs/elephant_throwing_cs_logo.png new file mode 100644 index 0000000..99b5a47 Binary files /dev/null and b/web/imgs/elephant_throwing_cs_logo.png differ diff --git a/web/imgs/federation-01.svg b/web/imgs/federation-01.svg new file mode 100644 index 0000000..06c571d --- /dev/null +++ b/web/imgs/federation-01.svg @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/federation-02.svg b/web/imgs/federation-02.svg new file mode 100644 index 0000000..811bec2 --- /dev/null +++ b/web/imgs/federation-02.svg @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/federation-03.svg b/web/imgs/federation-03.svg new file mode 100644 index 0000000..7314f65 --- /dev/null +++ b/web/imgs/federation-03.svg @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/federation-04.svg b/web/imgs/federation-04.svg new file mode 100644 index 0000000..a491100 --- /dev/null +++ b/web/imgs/federation-04.svg @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/federation-05.svg b/web/imgs/federation-05.svg new file mode 100644 index 0000000..e323249 --- /dev/null +++ b/web/imgs/federation-05.svg @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/federation-06.svg b/web/imgs/federation-06.svg new file mode 100644 index 0000000..e28d738 --- /dev/null +++ b/web/imgs/federation-06.svg @@ -0,0 +1,504 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/mascotte_left_mod.png b/web/imgs/mascotte_left_mod.png new file mode 100644 index 0000000..2cff309 Binary files /dev/null and b/web/imgs/mascotte_left_mod.png differ diff --git a/web/imgs/mascotte_right.png b/web/imgs/mascotte_right.png new file mode 100644 index 0000000..201d321 Binary files /dev/null and b/web/imgs/mascotte_right.png differ diff --git a/web/imgs/menuicon_active.svg b/web/imgs/menuicon_active.svg new file mode 100644 index 0000000..6bf4c33 --- /dev/null +++ b/web/imgs/menuicon_active.svg @@ -0,0 +1,53 @@ + +image/svg+xml \ No newline at end of file diff --git a/web/imgs/menuicon_inactive.svg b/web/imgs/menuicon_inactive.svg new file mode 100644 index 0000000..013ed19 --- /dev/null +++ b/web/imgs/menuicon_inactive.svg @@ -0,0 +1,59 @@ + +image/svg+xml \ No newline at end of file diff --git a/web/imgs/network-centralized.svg b/web/imgs/network-centralized.svg new file mode 100644 index 0000000..715b49b --- /dev/null +++ b/web/imgs/network-centralized.svg @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/network-decentralized.svg b/web/imgs/network-decentralized.svg new file mode 100644 index 0000000..a18a905 --- /dev/null +++ b/web/imgs/network-decentralized.svg @@ -0,0 +1,425 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/network-federated.svg b/web/imgs/network-federated.svg new file mode 100644 index 0000000..2992fa9 --- /dev/null +++ b/web/imgs/network-federated.svg @@ -0,0 +1,443 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/thread_01.svg b/web/imgs/thread_01.svg new file mode 100644 index 0000000..9e93696 --- /dev/null +++ b/web/imgs/thread_01.svg @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/thread_02.svg b/web/imgs/thread_02.svg new file mode 100644 index 0000000..dbe0e55 --- /dev/null +++ b/web/imgs/thread_02.svg @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/thread_03.svg b/web/imgs/thread_03.svg new file mode 100644 index 0000000..d6db26f --- /dev/null +++ b/web/imgs/thread_03.svg @@ -0,0 +1,1006 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/imgs/thread_04.svg b/web/imgs/thread_04.svg new file mode 100644 index 0000000..d2d4e77 --- /dev/null +++ b/web/imgs/thread_04.svg @@ -0,0 +1,1056 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/index.php b/web/index.php new file mode 100644 index 0000000..76b42d0 --- /dev/null +++ b/web/index.php @@ -0,0 +1,613 @@ +'home_en.php', + 'lang'=>'en', + 'atit'=>'' + ); + break; + case '/it': + case '/it/': + $cont=array( + 'fp'=>'home_it.php', + 'lang'=>'it', + 'atit'=>'' + ); + break; + default: + $cont=array( + 'fp'=>'404.php', + 'lang'=>'en', + 'atit'=>' - 404' + ); + break; +} + +$cssrand=rand(0,999999); + +?> + + + +Mastodon Startpage<?php echo($cont['atit']); ?> + + + + + + + + + + +
+
+ + +
+

Introduction

+

Mastodon is an innovative open-source and self-hostable microblogging platform similar to Twitter or Tumblr. Its development was started in 2016 by Eugen Rochko and since then Mastodon constantly attracted new users and communities looking for a social environment independent from big company logics and censorship.

+

Mastodon is not a Twitter clone: by concept, structure and functionalities it is something completely different and interesting!

+

This website is an introduction to Mastodon’s basic concepts and features that you should know to fully understand how Mastodon works. It is conceived as a series of independent and menu selectable chapters, but it can also be read as a single text. It also hosts a list of instances that you can browse and use as a starting point to find the Mastodon instance that best fits your needs.

+
+ +
+

About us

+

This website is made by a group of enthusiastic Mastodon users, mainly from the italian instance mastodon.bida.im, and by other contributors from different instances.

+

Here are some contacts of those involved

+ +

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license.

+
+ +
+

What is Mastodon?

+
+ +
+

Mastodon is not a social network

+

There is no such thing as a social network called Mastodon! Instead there are thousands of independent social networks called Mastodon Instances.

+

Every Instance has its own server, community, rules, admins and moderation.

+

From every Mastodon Instance it is possible to interact with users who are on other Instances. It works exactly like e-mail does (you can send an e-mail from Gmail to Yahoo, right?). That’s because all the Instances can be mutually interconnected.

+

Every Instance administrator can choose to silence or completely block a user of his or another Instance but also block another Instance as a whole (for example because it has bad moderation and allows trolling).

+
+ +
+

So what is Mastodon?

+

When we say “Mastodon” we mean the whole network of Mastodon Instances but also the technology that the Instances share.

+

A good way to describe the network is by saying that Mastodon is a “galaxy of social networks based on a common platform”.

+

+

+ +
+

Who owns Mastodon?

+

Everybody! Since Mastodon is a Free and Open Source platform, everybody can use, modify and install it on his own server. Moreover the people who developed Mastodon do not own any copyright on it. That’s the basic philosophy of Free and Open Source Software: to share useful software that everybody can use freely and collaborate to improve it.

+

A girl with her arms opened in front of a blue sky. Photo by Jess Hall.

+

Your personal data and content is located on the Instance you have chosen. That means that only the instance admins can have access to it (like on every social platform).

+
+ +
+

The Instance

+
+ +
+

Running an Instance

+

Everyone who has a server and enough skills to manage it can create his-her own Instance. Mastodon’s server software is completely Free and Open Source Software (FOSS), but hosting a server and buying a domain name have some costs. It also takes some work to maintain and moderate an Instance. Depending on the technical configuration and the amount of users of the Instance, running it can cost between a few hundred dollars per year to many thousands.
+Many Instances are crowfunded but it’s also possible that some will ask a fee or some other way to cover its costs.
+Mastodon is born as an Ad-free platform. For this reason, instances that will finance themselve with advertisement will be silenced or blocked by many.

+

Close-up of a server. Photo by Whrelf Siemens.

+
+ +
+

Choosing the Instance

+

Since every Instance is completely independent, each Instance can be very different from the others.

+

If you sign up on an Instance run by a French vegan community you can expect most of the users to communicate in French, and that posting pictures of barbecues and meat food would be considered offensive.
+Similarly, if you sign up on an Instance run by a British religious community, the users will communicate in English and pictures of barbecues will be welcomed, but maybe posting nudity would be a problem.
+Choosing the Instance that better fits your needs and attitudes is the best way to access the Mastodon galaxy.

+

You can choose an Instance by language, moderation policy, political views or any other criteria. Anyway, the more you feel at home on your chosen Instance, the better it is.

+

A well-run Instance will have its policies clearly written on its homepage and also publish the list of blocked or silenced Instances.

+

It’s extremely important that you sign up on an Instance whose admins share your language, your culture and, possibly, your political views: that way you will be able to have an easier time communicating with them.

+

Don’t be afraid to try out as many Instances as you like: you can always delete your accounts later on, link them to one another, or even keep them all! The sky is the limit!

+
+ +
+

Medium and small Instances are better

+

There are thousands of different Mastodon Instances. There are Instances with only 5 users but also Instances with more than 100.000 users.

+

One such Instance is mastodon.social. It’s the Instance created and run by the creator of Mastodon, but that doesn’t mean it should be considered some sort of “official” Mastodon Instance, because every Instance has equal standing to the others.

+

The problem with those very huge Instances is that, since they are not connected to a specific community or identity, they tend to replicate some of the problems of the big commercial social networks in regards to users’ behaviour.

+

As an example: if in your country you are part of a threathened minority and you are registered on a huge Instance and another user from your country harrasses you, it will be a struggle for the admin just to understand that you are the harrassed one! At the opposite, if you are registered on an Instance dedicated to your community, it will be easier for the admin to intervene quickly.

+

That’s just one of the reasons why the Mastodon network works at its best by connecting many small and medium Instances instead of relying on a bunch of gigantic ones.

+

For all those reasons, on this website we will not list such big Instances among our suggestions.

+
+ +
+

Interactions and echo-chambers

+

Given all the possibilities that users and admins have to block other users and Instances, one could argue that Mastodon is a network filled with closed communities that don’t talk to each other and isolate themselves in their own echo-chambers.

+

Two monkey teddy bears, one covering its ears, the other covering its eyes. Photo by Streuli Silvan.

+

While this is technically possible, the truth is completely different and in fact on Mastodon there is a huge variety of communities that is rarely seen on most social networks.
+Basically, every Instance can interact with all the other ones and later decide to close some of these connections. That’s up to the community that runs the Instance, its culture and mind openness. A closed minded community that doesn’t respect different people and lifestyles will easily block and be blocked from other Instances. On the other hand, an Instance run by open-minded people that is willing to talk respectfully with others will never be blocked by other open-minded communities.

+

Since its inception, Mastodon has been adopted by various communities that carry anti-fascist, anti-racist, anti-sexist, pro-LGBT, anti-homophobic, anti-transphobic values and with time attracted other communities that promote animal rights, vegetarianism and veganism and also minorities, human rights groups etc. Therefore, racist and bigots would be surely banned from most Instances and if they would run their own Instances, those Instances would be quickly isolated from most of the existing ones.

+
+ +
+

Instance based software modifications and personalization

+

Since Mastodon software is open source (if you are a geek you can find the code here), every Instance administrator can apply some little modifications to it. For example some Instances make it possible for a user to publish posts longer than the standard 500 characters. Also, some Instances can choose to not use certain features like Trending Hashtags.

+
+ +
+

The software

+
+ +
+

Mastodon on smartphones

+

Everybody has an e-mail address, but as you can notice there is no “official” e-mail App. Instead you can access to your e-mail from your web browser or using one of many e-mail Apps. In much the same way, there is no official App for Mastodon (and you can always use your web browser!).

+

On Android you have many alternatives, the most notable being Tusky, Fedilab and Subway Toot. You can download these either from the Google Play App-store or from F-Droid, a free and open source alternative to App-stores.

+

On iOS you have a similar amount of choice, with Amaroq, Toot and Mast being the most widely used Apps.

+

Every App is slightly different from the others and will have its pros and cons, so you will have to check them out and see for yourself what fits you best, just like with Mastodon Instances!

+

Be aware that some of those Apps, such as Toot and Mast, may not be free or open source!

+

Three screenshots showing Mastodon running on smartphones.

+
+ +
+

Mastodon on the desktop

+

The usual way to access to your Instance from your desktop computer is by going to the Instance homepage trough your browser. But there are also Desktop Applications for Mastodon like

+ +

There are also alternative frontends! A frontend is a website where you can login with your Mastodon account but doesn’t show your standard home page graphics: the colours, buttons and menus are all different and maybe you could find them better or easier to use then the original ones.

+
    +
  • Pinafore: a simplified Mastodon frontend
  • +
  • Halcyon: Looks exactly like Twitter
  • +
+

Apps and frontends can add, hide or customize certain functions that you find when you access to your Instance from its homepage. Therefore sometimes it’s possible to find tips, advices or instructions that are not applicable if you use them on a different one. Take notice.

+

A screenshot from Mastodon official web frontend.

+
+ +
+

Using Mastodon

+
+ +
+

Mastodon account

+

A Mastodon account is formed somehow like an e-mail account: +

@name@instance

+

If you write only @name, most of the Apps will assume that the contact is on the same Instance you are currently logged into. Therefore, if that person is on a different Instance and you don’t write the @instance part, clicking on @name will either result in a broken link or bring you to somebody with the same name on your Instance.

+

Some Apps will correct this behaviour, so check it out.

+
+ +
+

Three timelines

+

On Mastodon you have 3 different timelines

+
    +
  • Home: like on Twitter, it shows all the posts of all the people you follow on all Instances;
  • +
  • Local: it shows all the posts of the members of your Instance;
  • +
  • Federated: it shows all the posts of the people that you follow and also the posts of people on other Instances that are followed by people of your Instance.
  • +
+

On every timeline the posts are shown in chronological order. This means that no algorythm, number of stars or other factors will influence the number of times you will see a post. A post can be boosted (“retweeted”) but that’s it.

+

Screenshot showing the three timelines header.

+
+ +
+

Searching things

+

In many Instances, if you search something in the search box of Mastodon, it will find only users or #hashtags. A more powerful search system will be implemented in the near future.

+

The search box does not explore the entire Fediverse but only the portion of it that your instance is connected to. Therefore if you search a user it will search among all the users of your instance and of the instances you are connected to, but not those who are on instances you aren’t connected to. If you search an hashtag it will not list all the posts from all the existing instances containing it but only the posts published by users that your instance knows.

+

A screenshot showing the search box.

+
+ +
+

Where are the trending topics?

+

Twitter’s “Trending Topics” feature finds its Mastodon’s counterpart in “Trending Hashtags”. When “Trending Hashtags” are active, though, they’re reviewed by the admins to ensure they aren’t being gamed as a vector for abuse. However what’s most important is that this feature is completely optional: it is up to each instance’s admin and its community to decide if they want to have “Trending Hashtags”, and in fact many instances don’t activate it, thus eliminating the urge for their users to participate in certain topics instead of others and all the “social noise” about vapor-problems. So many Mastodon Instances are places where you can talk with people without having to know by a “Trending Topics” board that a certain topic is more important than the one you really want to talk about.

+

A screenshot showing the 'trending hashtags' feature.

+
+ +
+

No “Retweet and comment”

+

The “boost” function has no “comment” feature like the “retweet and comment” button on Twitter.
+That’s by design, because it’s a feature that is mostly used to harrass people and leads to talks around a topic but without direct interaction. Yes, we know, it also has legitimate uses but, well, the point here is to prefer real interactions than boosts.

+
+ +
+

Linking a toot

+

If you want to suggest somebody to read a certain thread on Mastodon you can boost it or interact directly in the thread and mention the account of the person that you want to join the discussion.

+

You can also reference to a post by copying its URL and pasting it into a post of yours. That’s ok too, but remember that it will work correctly only from desktop and from certain Apps. In other Apps, clicking on the link will take the user from the App to the browser.

+

A screenshot showing the 'three dots' menu with 'copy link to status' entry highlighted.

+
+ +
+

“Obscured” followers list

+

When you check another user’s profile you will see the number of people who follow and who are followed by them, but if you click on that number you can’t see the entire list of people. Instead you can only see some of them: the ones you already know or who are members of your same Instance.
+That’s by design, being an anti-harrassment feature.
+Let’s check real life: in real life you don’t walk around with the list of your friends attached to your neck, do you?
+But then, if you cannot discover new people by checking who is following who, how can you find and meet new people on Mastodon? By talking, socializing and discussing things. When you boost friends’ posts you are presenting them to all your other friends and so on. Mastodon emphasizes real human socialization instead of espionage-style exploration of profiles.

+

A screenshot showing the 'Follows' list.

+
+ +
+

The post’s privacy

+

When you post a message (toot) you can choose among 4 types of posting

+
    +
  • Public: your post is public, it appears on public timelines and everybody can see it. Public posts are recognizable by a globe icon.
  • +
  • Not listed: your post is still public but doesn’t appear on timelines. People can read it only if they are mentioned in it or if they go to your profile and scroll through your posts. Not listed posts are recognizable by an open padlock icon.
  • +
  • Followers only: your post is still half-public because only your followers will see it. At their eyes it appears as a regular public post. Followers only posts are recognizable by a closed padlock icon.
  • +
  • Direct: your post is private and viewable only by the people mentioned in it. Direct posts are recognizable by an envelope icon.
  • +
+

Anyway remember that Mastodon is designed to spread interactions and not for privacy: your Instance admins can read all your messages, including direct ones, just like on every other big social network.

+

For encrypted messaging there are other and more specific platforms.

+
+ +
+

Threads and ramifications

+

A thread can evolve in a sort of “tree” because people will reply and counter-reply to different posts. In the following picture you see a thread that, from a single post, evolves in four different branches:

+

A graphical representation of a thread with four branches.

+

Twitter users are quite used to it but if you arrived here from different platforms (eg. Facebook) this can be a little bit confusing.

+
+ +
+

Moving through ramifications

+

If you want to read a thread that is highly ramificated, the most important concept to understand is that when a post is selected, the thread is reorganized to show only the branch that starts from the first toot and arrives to the selected one, plus all the posts and branches following the selected post.

+

A graphical representation of a thread with four branches.

+

Let’s make some examples. If you want to read the thread pictured above and you select the first toot, all the following posts will be rearranged in chronological order (see the picture below).

+

A graphical representation of the succession of posts when you select the first toot from the thread pictured in the previous image.

+

Now, pay attention: if you pick the thread by selecting the post nr. 2 you will still see all the following posts in chronological order, but you will not see the previous ramification (the sub-thread containing the posts 2a and 3a).

+

"imgs/thread_03.svg" class="image" alt="A graphical representation of the succession of posts when you select the second toot from the thread pictured in the first image.">

+

Also, if you pick the last post of a sub-thread (in this picture the post 7c) you will see all the previous posts in chronological order, but excluding all the other sub-threads.

+

A graphical representation of the succession of posts when you select the last toot from one branch of the thread pictured in the first image.

+
+ +
+

Moving to another Instance

+

If you want to change Instance it is possible to transfer all your data (including posts, followers and blocked users list) to the new one. To do so you must first export your data from the settings page of the Instance you are currently on and import them to your new account on your desired Instance.

+

Screenshot showing the 'Import and export' feature.

+

Please beware that if an old version of the Mastodon software is used in one of those Instances, this process could only partially work.
+Also beware that Mastodon Developers are planning to change how these tools will work.

+
+ +
+

Moderation

+
+ +
+

Harassment & moderation

+

Mastodon is famous for its anti-harassment environment not because there isn’t any on it (that would be impossible) but because its structure and moderation tools permit a series of efficient and immediate actions against bad accounts or Instances and because most of the Instances are run by communities that actively work to maintain Mastodon’s environment a nice and tolerant place. Many communities help, inform and warn each other when they identify an Instance run by people that spread hatespeech or trolling. Having admins and moderators for every single instance, the ratio between regular users and moderators can be extremely high. Also remember that every Instance has its own policy based on the community’s culture, ethics and political view. Moderation is always a political act and claiming for total impartiality means taking the side of the status quo.

+
+ +
+

Blocking and silencing

+

If the admins of Instance1 block Instance2, then the users of Instance1 cannot interact with the users of Instance2.

+

If the admins of Instance1 silence Instance2, then the users of Instance1 can still privately follow and interact with the users of Instance2, but those interactions (like boosts) will not be seen by the other users of Instance1.

+

To be more clear: blocking is used for Instances that permit horrible things and behaviours, while silencing is used for Instances that your Instance tolerate but doesn’t appreciate that much.

+

The same things are applicable to users.

+

You too, as a simple user, can decide to block or silence – for your eyes – other users and entire Instances.

+

Please note that even if Instance2 is blocked, it’s still possible that their users see some contents of Instance1. More effective kinds of blocking are in development.

+
+ +
+

Mastodon & Twitter

+
+ +
+

Mastodon is not Twitter...

+

On Mastodon you will not receive notifications like “40 people liked the post you boosted” or “John is tweeting about this” or “Laura and Mike are now following Hannah”.

+

Nobody will tell you what you “must” read or who you “must” follow.

+

Nobody cares that much about the “success” of a post.

+

There are no blue badges for verified accounts.

+

You get informed about how many people “starred” or boosted your post and that’s it.

+

To know how many times a certain post was boosted or “starred” you must click on it. But there is no emphasis on it and in fact nobody really cares.

+

What’s important, here, is to interact in real conversations and... who cares about “points” received from people that don’t interact?

+
+ +
+

...but are you still tangled in a Twitter mindset?

+

Are you still searching for the Trending Topics that will impose to everyone today’s obligatory conversation topic?

+

Are you searching for “people to follow” instead of “people to interact with”?

+

Are you still planning time-wasting things like hashtag wars instead of doing something real?

+

Are you searching for emotional and social gratification in the number of retweets you receive?

+

Are you still judging a post by the number of likes that it received?

+

Are you still writing cool posts to obtain likes insted of writing interesting things that stimulate discussion and interaction?

+

If so, please pay attention: there is still much Twitter inside you! And it takes some time to heal... 😉

+
+ +
+

Bridging Mastodon and Twitter

+

You can still maintain some relation with your previous Twitter account using crossposting services.

+

There are services like ifttt.com and masto.donte which can connect your Twitter account with your Mastodon account. With this services you can publish your tweets on Mastodon and/or publish your toots on Twitter.

+

We strongly suggest to use only the second option because, being centered on real interactions, a Mastodon account that is simply a Twitter bot that doesn’t reply will easily be blocked by many.

+

Many Instances have strong rules about the use of crossposters, expecially because if you use them from Twitter to Mastodon, your Mastodon account could be considered like a bot and also bots are sometimes strongly regulated. So check your Instance policy before using them.

+

If you want mention a Twitter user in a toot crossposted to Twitter and you want his username to be clickable either from Mastodon and from Twitter users, you must write it as follows:

+

https://twitter.com/username

+

A mastodon, two arrows (one pointing left, one pointing right) and Twitter's logo.

+
+ +
+

Federation

+
+ +
+

The Fediverse

+

All the Mastodon Instances that together form the entire “Mastodon Galaxy” are part of something much bigger called the Fediverse.

+

Besides Mastodon there are many other free platforms. Some of them, like Pleroma or Misskey are also similar to Twitter, but others are very different

+ +

And there are more...

+

All of them, like Mastodon, don’t have a unique central server but are a “Galaxy” of many Instances. There is no “main” or “official” Friendica Instance, you can choose among different PixelFed Instances and so on...

+

Please note that what on Mastodon is called an “Instance”, on other platforms may have a different name (for example, on Hubzilla it is called an “Hub”).

+

And all of these platforms (“Galaxies”) interact with each other, forming the Fediverse.

+

What does that mean? Well, imagine that you could natively receive Facebook statuses on Twitter, or even liking and commenting a YouTube video using your Tumblr account.

+

That’s what the Fediverse is! You have an account on Pixelfed? Ok, I don’t use Pixelfed but I can follow you from Mastodon! A friend of mine does’t like Mastodon but prefers the more Facebook-like Friendica? No problem: he can follow me from Friendica and we can both chat and interact, staying each one on the platform that we prefer.

+

Also remember that the whole Fediverse is an innovative work in progress where not everything works yet perfectly and some adjustments on your part may be needed. Things will likely work differently from what you expect and the developers may not have time or interest in implementing things that you think should be priorities.

+

Logos of many FOSS social network platforms in front of a picture of a galaxy.

+
+ +
+

Decentralized and federated

+

The majority of commercial social platforms are centralized networks. That means that everything on them is run and controlled by one authority, usually the company that owns the platform.

+

If you want to interact with a Twitter user, for example, you can do it only by signing up on Twitter.com, thus agreeing to abide by Twitter’s terms and conditions policy.

+

A graphical representation of a centralized network, showing Twitter's logo at its center, surrounded by many dots connected to it by straight lines.

+

Mastodon is instead a galaxy of decentralized and independent networks called instances, each one with its own website, policy and community.

+

A graphical representation of a decentralized network, showing four Mastodon's logos, each one surrounded by many dots connected to it by straight lines.

+

But Mastodon is also federated! That means that all of these networks can (but are not obliged to) interact with each other.

+

A graphical representation of a federated network, showing four Mastodon's logos, each one surrounded by many dots connected to it by straight lines. Each Mastodon's logo is also connected to each other by a curved line.

+
+ +
+

How federation works (theory)

+

A fresh new instance is not federated with any other instance, so its users can initially interact only with other users on the same instance.

+

A graphical representation of a new, isolated Mastodon instance, and three networks of Mastodon instances, not yet connected to each other.

+

Once you create a connection with somebody on another instance, or somebody on another instance creates a connection with somebody on your instance (we will see later how), all the users of your instance can begin to interact with that user.

+

The previously isolated Mastodon instance has established a new connection with another instance.

+

The user of the other instance will boost and interact with posts of other users of their instance and also other instances that are just in connection with them. All the people on your instance can see those interactions and participate in them. By doing so, the number of connections will start to grow (that’s what federation means).

+

The previously isolated Mastodon instance has established many new connections with other instances.

+

Every single user of any instance can create a new connection with new instances.

+

A new connection between two previously unconnected instances.

+

Therefore, the more you interact with people on other instances, the more your instance network will grow and become part of a huge, gigantic federated network formed by lots of instances. Your federated network will probably never cover the entire Mastodon galaxy but only a part of it. How much depends on you to decide. The more people on other instances you connect with, the bigger your network will be.

+

Almost every instance is now connected to each other.

+

If one day your instance decides to end the interaction with a certain other instance by blocking it, all your connections with other instances will remain and other instances can continue to interact with the instance that is blocked by your instance.

+

An instance blocks another instance.

+

Note some instances end up creating completely different “parallel” networks. This can happen because those instances are blocked by many instances in your network or just because connections don’t exist (yet). They too are on Mastodon, but in a completely different part of the galaxy. Far far away, they are not part of your federated network but members of an autonomous and independent network.

+

Also note that the the same concepts are appliable to all the platforms of the Fediverse! Your instance isn’t limited to connecting with other Mastodon instances, you can connect your instance with people on Pleroma, Friendica, Pixelfed, Peertube and so on. How vast and wide-ranging your view of the Fediverse can be is entirely up to you! 😉

+
+ +
+

How federation works (practice)

+

How can you create a connection with people that you don’t know on instances that nobody on your network has ever seen before?

+

Well, that’s a little bit tricky and it works exactly as in real life: by exploring, going to new places, searching new things and having different experiences.

+

On commercial centralized networks everything happens inside: by design you search things without ever going outside the platform and remaining inside their gates.

+

Here it is different: your federation will not grow very much if you remain tangled inside the borders of your own network. You must go outside Mastodon, read blogs, magazines, create a new account on a different instance, surf other networks and forums, have real life interactions to find new and completely unknown instances to add to your network! There are also webpages dedicated to the discovery of new Instances. Only explorers will enlarge their federation. Always remember that every closed gate is bad for your mind: Mastodon is not a walled garden separated from what exists outside of Mastodon itself.

+

That said, as you have seen in the previous chapter, connections are easy to make and although the Fediverse is huge, an instance will never really be isolated and unknown if it is willing to interact with others.

+

When you see some content you want to include in your network (for example an account or a post from another federated platform that uses ActivityPub, the communication protocol shared by all the platforms of the Fediverse), cut and paste the URL or account address into the search box of your instance. This will create a connection, and you can boost the post or follow that account. That’s it!

+

This process can change slightly depending on whether you access Mastodon directly via the website of your instance or through an App. It can also be slightly different on other Fediverse platforms.
+Some platforms have special buttons for helping you in this process. One of those is PeerTube.
+If you find a PeerTube video that you want to share on Mastodon, you can click on the button "share":

+

A screenshot showing Peertube with 'Share' button highlighted.

+

This will open a popup where you can easily copy the video's URL by clicking on the "copy" button:

+

A screenshot showing Peertube sharing dialogue.

+

Go to your Instance and paste the URL in the search box. The video appears in Mastodon and here you can like, comment or boost it. You can also decide to follow the user that posted the video. Everything as it was a Mastodon user.

+

A screenshot showing Mastodon search box with Peertube url pasted into it.

+

Otherwise, if you wanted only to follow that user, on PeerTube you can click on the button "Subscribe":

+

A screenshot showing Peertube with 'Subscribe' button highlighted.

+

This will open a popup that asks your Mastodon account:

+

A screenshot showing Peertube subscribe dialogue.

+

After logging in your Instance you can click on the "follow" button:

+

A screenshot showing Mastodon follow dialogue.

+

That's it! Now you can go to your Mastodon page or close the window and go back to PeerTube:

+

A screenshot showing Mastodon follow dialogue after clicking the 'Follow' button.

+
+ +
+

Our list of Instances

+
+ +
+ +

Here you can browse through our list of Instances, a selection we have made including only those which have between a minimum of 11 and a maximum of 30,000 users and, as far as we currently know, do not spread hate content.

+

[WORK IN PROGRESS]

+
+
+
+ + diff --git a/web/theme.css b/web/theme.css new file mode 100644 index 0000000..f1ac83e --- /dev/null +++ b/web/theme.css @@ -0,0 +1,251 @@ +@font-face { + font-family: 'Titillium'; + src: url('fonts/titillium-regular-webfont.woff') format('woff'); + font-style: normal; + font-weight: 300; +} +@font-face { + font-family: 'Titillium'; + src: url('fonts/titillium-regularitalic-webfont.woff') format('woff'); + font-style: italic; + font-weight: 300; +} +@font-face { + font-family: 'Titillium'; + src: url('fonts/titillium-bold-webfont.woff') format('woff'); + font-style: normal; + font-weight: 700; +} +@font-face { + font-family: 'Titillium'; + src: url('fonts/titillium-bolditalic-webfont.woff') format('woff'); + font-style: italic; + font-weight: 700; +} +strong { + font-weight: bold; +} +* { + box-sizing: border-box; +} +html { + scroll-behavior: smooth; +} +body { + background-image: url('imgs/mascotte_left_mod.png'), url('imgs/mascotte_right.png'), linear-gradient(#eeeeee, #3088d4); + background-repeat: no-repeat; + background-attachment: fixed; + background-position: bottom left, bottom right, top left; + background-size: 338px, 372px, auto; + background-color: #eeeeee; + color: black; +/* font-family: Roboto-slab, serif;*/ + font-family: Titillium, sans; + font-size: 16pt; + font-weight: 300; + margin: 0; + padding: 20pt; +/* padding-bottom: 540px;*/ +} +h1,h2,h3,h4,h5,h6 { + font-family: Titillium, sans; + font-weight: 700; + text-align: center; +} +h1 { + text-transform: uppercase; + font-size: 28pt; + text-shadow: 2px 2px 4px black; +/* margin: 60pt;*/ +} +section, #header { + background-color: rgba(255,255,255,0.92); + padding: 20pt; + padding-bottom: 2pt; + padding-top: 2pt; + margin-bottom: 20pt; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + border-radius: 9pt; +} +#header { + color: white; + background-image: url('imgs/elephant_throwing_cs_logo.png'), linear-gradient(rgba(117,175,227,0.7), rgba(182,213,240,0.7)); + background-repeat: no-repeat; + background-position: bottom left; + background-size: 200px, 500pt; + padding-bottom: 10px; + padding-top: 10px; +} +.lev1sect { + font-variant: small-caps; + text-shadow: 2px 2px 4px black; + margin-top: 40pt; + background-image: linear-gradient(rgba(117,175,227,0.7), rgba(182,213,240,0.7)); + /*background-image: linear-gradient(rgba(0,0,0,0.7), rgba(100,100,100,0.7));*/ + color: white; + padding: 1px; + border-radius: 9pt; +} +.lev1summ { + font-variant: small-caps; + font-weight: bold; +} +ul { + padding-left: 20pt; +} +ul li { + padding-left: 0; +} +a { + color: #CC0000; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a:active { + color: #FF0000; +} +#content { + width: 500pt; + margin-right: auto; + margin-left: auto; + text-align: justify; +/* -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto;*/ + z-index: 0; +} +#hmenu { + font-family: Titillium, sans; + font-size: 14pt; + background-color: black; + color: white; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 40px; + margin: 0; + padding: 0; + padding-left: 40px; + z-index: 2; + display: none; +} +#hmenu ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; +} +#hmenu li { + float: left; +} +#hmenu li a { + width: 80pt; + height: 40px; + text-align: center; + display: table-cell; + vertical-align: middle; +} +#hmenu li a:hover { + background-color: #333333; +} +#menuicon { + position: fixed; + top: 0; + left: 0; + margin: 0; + padding: 0; + z-index: 2; +} +#menuicon:hover { + cursor: pointer; +} +#summcont { + background-color: rgba(0,0,0,0.85); + position: fixed; + width: 200pt; + height: 100%; + top: 0; + left: 0; + margin: 0; + padding: 0; + padding-top: 40px; + display: none; + z-index: 1; +} +#summary { + font-family: Titillium, sans; + font-size: 14pt; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + padding-right: 5pt; + overflow: auto; +} +#summary a { + color: #3088D4; +} +#summary a:active { + color: #97C3E9; +} +#summary ol { + margin: 0; + margin-left: 30px; + padding: 0; + counter-reset: item; +} +#summary ol li { + display: block; + position: relative; + color: white; +} +#summary ol li:before { + content: counters(item, '.') ':'; + counter-increment: item; + position: absolute; + margin-right: 100%; + right: 5px; /* space between number and text */ +} +.image { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 100%; +/* box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19);*/ + border-radius: 9pt; +} +@media only screen and (max-width:540pt) { + body { + background-color: white; + background-image: none; + } + #content { + width: 100%; + } + #content { + text-align: left; + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + section { + padding: 0pt; + margin-bottom: 30pt; + box-shadow: none; + border-radius: 0; + } +} +@media only screen and (max-width:300pt) { + #summcont, .image { + width: 100%; + } +} +.anchor { + position: relative; + top: -40px; + display: block; + visibility: hidden; +}