blog CAT

Lector

Llegeix les darreres entrades de blog CAT.

from spla

Què és Akkoma? és un “fork” de #Pleroma però més “cool”, tal com diuen els seus desenvolupadors:

“a smallish microblogging platform, aka the cooler pleroma”

Akkoma és, per tant, el programari que s'executa en el servidor i que permet ser una part de la xarxa social plena de servidors que s'entenen entre sí gràcies al protocol #ActivityPub i que formen l'Univers d'instàncies Federades, el famós #fedivers. Akkoma és un dels programaris dels molts que emplenen aquest fedivers.

Quines funcionalitats fan que el programari #Akkoma sigui tant interessant i pràctic?

Publicar només per a usuaris locals

Sense mencionar a ningú, només els usuaris locals ho veuen. Qualsevol tema que es vulgui comentar o compartir només amb els usuaris locals o que l'administrador o moderadors del servidor vulguin anunciar-lis pot utilitzar aquesta funcionalitat. És tant fàcil com prémer l'icona “Local” abans de publicar.

línia de temps Local

Línia de temps Bombolla

En aquesta línia de temps es veuen tots els apunts dels servidors amics configurats per l'administrador del servidor. De molta utilitat per als usuaris nous, ja que hi poden trobar ràpidament a qui seguir sense haver d'abocar-se a la línia de temps federada que acostuma a ser una riada de publicacions escrites amb llengües diferents i que passa molt ràpida.

Línia de temps Bombolla FE Línia de temps Bombolla BE

Suport markdown

S'explica sol. Podem configurar el nostre compte per a que publiqui els apunts amb suport Markdown per defecte.

Reaccions emoji

Estem acostumats a prémer l'icona de l'estrella quan volem afavorir una publicació. També podem reaccionar a la mateixa amb emojis, tants com vulguem, i altres usuaris poden reaccionar amb emojis diferents al nostre o amb el mateix simplement clicant-hi al damunt (hi ha un comptador al costat de cada emoji).

reaccions emoji

Cites

No, no van del que potser estàs pensant. Aquesta funcionalitat permet respondre tot citant l'apunt original, fins i tot els nostres. Mostra gràficament l'apunt citat i al damunt el que li hem respòs.

citar un apunt

Converses amb vista d'arbre

Genial! amb altres programaris és difícil per no dir impossible entendre o veure qui està responen a qui en una conversa. Això s'ha acabat! a Akkoma tenim la vista d'arbre.

vista d'arbre interfície web vista d'arbre configuració

Mostrar el favicon del servidor al costat del usuari

Va bé per a saber quin programari és el servidor del usuari en qüestió, sense haver d'obrir el seu perfil públic.

favicon

Saber si un usuari és un bot

De vegades ens passa que responem a una publicació esperant alguna interacció i al veure que no n'hi ha mirem el perfil del usuari, adonant-nos que és un bot. A Akkoma es veu directament si un usuari és un bot perquè el programari afegeix un petit robot damunt del seu avatar, no cal obrir cap perfil.

Robot en avatar

El repositori de Akkoma és en un servidor #Gitea

Tenir el repositori oficial en un servidor Gitea és un punt més a favor.

I fins aquí les més destacades però en té moltes més que fan que Akkoma sigui un ferm candidat a destronar a Mastodon.

 
Read more...

from spla

Ja tenim acabat i funcionant a plena satisfacció el nostre programa #Python i ens agradaria compartir-lo a PyPi, l'index universal de paquets Python. Tenir-lo allà permet que qualsevol persona que el vulgui instal·lar en el seu ordinador o servidor només li caldrà fer el famós pip install nom_del_paquet.

Estructura

El que cal fer és tenir tots els fitxers necessaris per a executar-lo dins d'un sub directori. Com a exemple utilitzaré el cas real del meu Python wrapper for Akkoma API.

.
├── akkoma
│   ├── Akkoma.py
│   ├── __init__.py
├── LICENSE
├── README.md
├── setup.py
├── tests  

En el sub directori akkoma hi hem de tenir tant el codi que hem programat (el fitxer Akkoma.py) com __init__.py, que serveix per a que Python tracti aquest sub directori com un contenidor de paquets si __init__.py és un arxiu buid o aprofitar-lo per a inicialitzar el nostre programa. Per a no fer massa complexe aquesta entrada recomano llegir aquest enllaç per a entendre millor aquests conceptes.
Hi tenim un altre sub directori, test, que per ara el podem deixar buit. En l'arrel del projecte cal tenir la llicència que li vulguem posar (LICENSE), el inevitable README.md on expliquem com funciona el nostre programa i setup.py, molt important perquè descriu el paquet, diu a setuptools com construir-lo, com pujar-lo a PyPi i què es mostrarà allà.

setup.py

El rovell de l'ou. Aquest és el setup.py real que he utilitzat:

import setuptools

VERSION = '0.1.6'

with open('README.md', 'r', encoding='utf-8') as fh:
    long_description = fh.read()

setuptools.setup(
    name='Akkoma.py',
    version=VERSION,
    author='el_nostre_usuari_a_PyPi',
    author_email='adreça@correu.cat',
    description='Python wrapper for the [Akkoma](https://akkoma.dev/AkkomaGang/akkoma) API.',
    packages=['akkoma'],
    long_description=long_description,
    long_description_content_type='text/markdown',
    url='https://git.mastodont.cat/spla/Akkoma.py',
    install_requires=['pytz', 'requests', 'python-dateutil', 'decorator'],
    project_urls={
        'Bug Tracker': 'https://git.mastodont.cat/spla/Akkoma.py/issues',
    },
    keywords='akkoma api microblogging',
    classifiers=[
        "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
        "Topic :: Software Development :: Libraries :: Python Modules",
        "Topic :: Communications",
        "Intended Audience :: Developers",
        'Programming Language :: Python :: 3',
    ],
    python_requires = ">=3.8",
)  

La primera línia importa el mòdul setuptools (imprescindible per a construir el paquet). Definim la versió que li volem donar en la segona línia amb VERSION. La tercera obté el contingut de README.md que és el que es mostrarà a PyPi. setuptools.setup descriu el paquet, l'autor, la pàgina del projecte (recomanable tenir un repositori git i posar aquí les urls al mateix), els mòduls que necessitarà el nostre paquet per a executar-se (la línia install_requires), les paraules clau amb keywords (que venen a ser com els hashtags), ón es classifica el projecte amb classifiers (la llista sencera dels que podem usar és aquí) i quina versió de #Python cal per a executar el paquet amb python_requires (en aquest cas ha de ser igual o major a la versió 3.8).
Abans de construir el paquet i pujar-lo a PyPi cal que ens hi registrem. Quan ja tenim el registre fet ja ho tenim tot per a construir el paquet!

Construir el paquet

És tant fàcil com executar això en el directori arrel del projecte:

python -m build

Si no tenim instal·lat el mòdul build donarà un error. Cap problema!

pip install build  

I tornem a executar python -m build. Al final de moltes línies que ens mostrarà el constructor, veurem una línia final que diu:

Successfully built Akkoma.py-0.1.6.tar.gz and Akkoma.py-0.1.6-py3-none-any.whl

Perfecte! Tot llest per a pujar-lo a PyPi. Però un moment, primer ens cal el mòdul twine que facilita molt la tasca:

pip install twine

Ara sí:

python -m twine upload dist/*

Ens demanarà l'usuari i contrasenya de PyPi (ens hi hem registrat abans). Si tot va bé, ens donarà el missatge final on diu la URL del nostre paquet a PyPi i ja tindrem el primer paquet a l'abast de tot el món pythonista mundial.

 
Read more...

from spla

  • instal·lar el paquete pg_repack (a Ubuntu 20.04 LTS el paquet a instal·lar és postgresql-12-repack)
  • editar postgresql.conf i afegir:

shared_preload_libraries = 'pg_repack' 
 * reiniciar Postgresql


Dins de la base de dades i amb permís de super usuari cal crear l’extensió pg_repack:


CREATE EXTENSION pg_repack;

 * des de la consola executar, per cada una de les taules de la base de dades:

pg_repack -x -d <base de dades> --table <taula>

El paràmetre x li diu a pg_repack que només els index però també podem fer repack a les taules (és el que faig amb la base de dades de Mastodon):

pg_repack -d <base de dades> --table <taula>

Podem crear un arxiu bash per a fer al repack a totes les taules de manera automatitzada.

Quan executem aquest fitxer bash, paciència, pot trigar una estona llarga en fer el repack a totes les taules però tampoc massa. Ja està, ja hem recuperat espai de disc dur.
Nota: en el meu cas de mastodont.cat, desprès d'esborrar 1.600 usuaris inactius, la base de dades de Mastodon ha baixat d'ocupar 30GB a només 20.

 
Read more...

from spla

Configurar Mastodon

Desprès dels passos de la primera part ara ens tocava configurar Mastodon:

RAILS_ENV=production bundle exec rake mastodon:setup

Primer ens pregunta el nom del domini (domain name). En el meu cas és mamut.freeddns.org:

Your instance is identified by its domain name. Changing it afterward will break things. Domain name: mamut.freeddns.org

A continuació pregunta si volem activar el mode un sol usuari, mode que desactiva els registres i mostra el nostre perfil per defecte quan algú visiti l'instància:

Single user mode disables registrations and redirects the landing page to your public profile. Do you want to enable single user mode? (y/N) y

No volem Docker:

Are you using Docker to run Mastodon? (Y/n) n

En les següents preguntes simplement premem la tecla Enter:

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL user: mastodon
Password of PostgreSQL user:

Dirà que Database configuration works!. Perfecte! Seguim. Ara la configuració de Redis, També premem Enter en totes les questions:

Redis host: localhost
Redis port: 6379
Redis password: 

I també li agradarà: Redis configuration works!. Seguim!
Ara pregunta si volem desar els fitxers multi mèdia en el núvol. Responem que no:

Do you want to store uploaded files on the cloud? (y/N) N

I li diem que sí a enviar correus des de localhost:

Do you want to send e-mails from localhost? (y/N) y

Des de quina adreça? premem enter després de canviar notifications per notificacions:

E-mail address to send e-mails "from": (Mastodon <notificacions@mamut.freeddns.org>)

No volem enviar cap correu de prova:

Send a test e-mail with this configuration right now? (Y/n) N

Ja hem acabat. Ara pregunta si desem la configuració:

This configuration will be written to .env.production. Save configuration? (Y/n) Y

Ara diu això, li diem que sí:

Now that configuration is saved, the database schema must be loaded.If the database already exists, this will erase its contents. Prepare the database now? (Y/n) Y

Quan acabi:

Created database 'mastodon_production'. Done!

I el pas final, compilar els assets (aquí és on la Raspberry Pi 3B+ deia “de cap manera, que només tinc 1GB de RAM!”:

Compile the assets now? (Y/n)  Y

Trigarà uns minuts, paciència! Quan hagi acabat dirà:

Compiled all packs in /home/mastodon/live/public/packs. Done! All done! You can now power on the Mastodon server

Ens permet crear l'admin, doncs sí, nosaltres mateixos:

Do you want to create an admin user straight away? (Y/n) Y

Pregunta nom d'usuari i adreça de correu electrònic. Responem el que vulguem i ens retornarà una contrasenya. La desem ben desada per més tard!

Ja podem tornar al usuari root.

nginx

Copiem la plantilla per a nginx de mastodon:

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon

Editem el fitxer copiat per a canviar example.com per el nostre domini mamut.freeddns.org (apareix dues vegades) i desem els canvis. Comprovem que a nginx li agrada fent nginx -t. Si no dona cap error carreguem la nova configuració:

systemctl reload nginx

Certificat SSL

Per a obtenir el certificat SSL fem el següent:

certbot --nginx -d mamut.freeddns.org

Si ens dona l'error nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/sites-enabled/mastodon:33, tornem a editar el fitxer /etc/nginx/sites-available/mastodoni comentem la línia del error, en aquest exemple la línia 33. Desem els canvis i tornem a provar:

certbot --nginx -d mamut.freeddns.org

Si tot ha anat bé:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mamut.freeddns.org/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mamut.freeddns.org/privkey.pem

unitats systemd

Copiem les tres unitats systemd necessàries:

cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

Informem a systemd:

systemctl daemon-reload

I (ja era hora!) iniciem Mastodon:

systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Encara que tinguem que parar la Raspberry per qualsevol motiu, aquest enable de dalt farà que Mastodon torni a posar-se en marxa quan engeguem de nou la Raspi.

Ja estem! podem visitar el nostre servidor Mastodon executant-se en la Raspberry de casa!

 
Read more...