| CARVIEW |
Nesse guia, você terá uma introdução ao FFMPEG, com muitos exemplos práticos, assim poderá ver como essa poderosa ferramenta poderá lhe ajudar no dia a dia com seus vídeos.
O FFMPEG é um conjunto de programas e bibliotecas de software livre e código aberto para lidar com arquivos de imagem, vídeos e áudios dos mais variados tipos, executando operações de reprodução, conversão, cortes e até mesmo aplicando efeitos. É possível realizar todo esse trabalho diretamente pela linha de comando.
Em alguns sistemas operacionais o programa FFMPEG já vem instalado, caso no seu não esteja, verifique na documentação oficial como realizar a instalação no seu SO 
Link da documentação oficial: https://ffmpeg.org/download.html
Container vs Codec
Um pouco de teoria antes de entrar na prática
Ao entrar nesse mundo do FFMPEG, você irá se deparar com alguns termos e agora veremos dois (02) deles: Container e Codec.
Basicamente, Container é o formato do arquivo (.mp4, .mp3, .avi, .jpg, etc …) é a caixa onde vai guardar tudo sobre o arquivo (vídeo, imagem, som, etc …). Já o Codec é o programa que vai codificar/decodificar o arquivo, nisso temos vários tipos de Codec para cada tipo de arquivo:
Vídeo: H.264, H.265, MPEG-4, etc …
Áudio: AAC, MP3, Opus, etc …
Como esse é um guia introdutório não vamos entrar em muitos detalhes sobre os Container e Codec mas, se você desejar conhecer mais detalhes sobre isso, comente abaixo que assim pode criar textos bem aprofundados sobre cada
Sintaxe básica

ffmpeg – É a chamada do programa
opcoes_globais – São as opções globais que vão ser aplicadas em todo o produto (Sobrescrever sem perguntar, verbosidade, etc …)
opcoes_arquivo_entrada – Opções do arquivo de entrada (Tempo de início do arquivo, tempo de término, etc …)
-i url_entrada – Caminho do arquivo de entrada
opcoes_arquivo_saida – Opções do arquivo de saída (Codec de vídeo, codec de áudio, etc …)
url_saida – Caminho do arquivo de saída
Informações do arquivo
Para visualizar informações do arquivo utilize o comando abaixo, substituindo o “video01.mp4” pelo caminho do seu arquivo de vídeo, áudio ou imagem:
ffmpeg -i video01.mp4
Executando esse comando você verá uma saída parecida com a minha abaixo mostrando os detalhes do arquivo.
ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch
=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --en
able-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enab
le-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enab
le-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libv
px --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --ena
ble-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray -
-enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq -
-enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video01.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso6iso2avc1mp41
title : Array Map in 100 Seconds
artist : Fireship
encoder : Lavf60.3.100
Duration: 00:01:40.16, start: 0.000000, bitrate: 444 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 313 kb/s, 29.97 fps, 29.97 tb
r, 30k tbn (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
At least one output file must be specified
Conversão simples
Vamos dizer que você tem um arquivo de vídeo .mp4 porém, tem que enviar para algum lugar que somente aceita vídeos no formato .avi, utilize o comando abaixo trocando o “video01.mp4” pelo caminho do seu arquivo de origem e o “video01.avi” para o destino do arquivo convertido.
ffmpeg -i video01.mp4 video01.avi
Ao executar esse comando o FFMPEG irá iniciar o processo de conversão do arquivo, tentando manter a mesma qualidade do arquivo de saída do arquivo de entrada. Dependendo do tamanho do seu arquivo e das especificações do seu hardware esse processo pode ser bem demorado. No resultado do comando você poderá acompanhar o progresso de conversão e finalização.

Cortar um trecho do vídeo
Outra tarefa muito comum para fazer com o FFMPEG é cortar um trecho de vídeo, vamos ver abaixo como cortar os primeiros 10 segundos do vídeo.
ffmpeg -i video01.mp4 -ss 00:00:00 -to 00:00:10 -c copy video_cortado.mp4
-i video01.mp4 – É o caminho do arquivo de vídeo
-ss 00:00:00 – Tempo de início do corte do vídeo no seguinte formato HH:MM:SS
-to 00:00:10 – Tempo final do corte do vídeo no seguinte formato HH:MM:SS, não é o tamanho do vídeo, e sim é a localização do vídeo do corte
-c copy – Informa ao FFMPEG para manter o mesmo codec do arquivo original
video_cortado.mp4 – Caminho do arquivo final convertido
Ao executar esse comando, será exibido os dados do arquivo e irá iniciar o processo de corte do arquivo, dependendo do tamanho do corte e do seu hardware esse processo pode demorar alguns minutos ou horas.
Extrair áudio
Vamos para mais um caso muito corriqueiro no trabalho com vídeos, extração de áudio. Por exemplo, você tem um vídeo de uma música, palestra, etc … E precisa apenas do áudio, sem o vídeo, você pode executar o comando abaixo para fazer a extração apenas do áudio.
ffmpeg -i video01.mp4 -vn -acodec copy audio01.aac
-i video01.mp4 – Caminho do arquivo de vídeo que terá o áudio extraído
-vn – Informa que FFMPEG que não é para processar o vídeo no momento do processamento
-acodec copy – Informa ao FFMPEG que deve ser utilizado o codec original de áudio utilizado no vídeo
audio01.aac – Caminho do arquivo de resultado em formato AAC
Assim como nos outros comandos, dependendo do tamanho do seu arquivo e do seu hardware esse comando pode demorar segundos, minutos ou horas.
Redimensionar vídeo
Existem casos que será necessário fazer um redimensionamento de vídeos, tanto aumentar como reduzir a sua resolução. Vamos ver um exemplo abaixo reduzindo a resolução do vídeo para 240p
ffmpeg -i video01.mp4 -vf scale=320x240 video01_240p.mp4
-i video01.mp4 – Caminho do arquivo de vídeo
-vf – (Video Filter) aplica o filtro no stream do vídeo
scale=320×240 – Largura e altura do vídeo, lembre-se que dependendo do tamanho que for informado pode distorcer o vídeo de resultado
video01_240p.mp4 – Caminho do arquivo de resultado
Transformar frame vídeo em imagem
Para transformar o frame de um vídeo em uma imagem, por exemplo para um thumbnail de um vídeo, você pode executar o comando da seguinte forma:
ffmpeg -i video01.mp4 -ss 00:00:10 -vframes 1 thumbnail.jpg
-i video01.mp4 – Caminho do arquivo de vídeo
-ss 00:00:10 – Tempo do vídeo para extração do frame
-vframes 1 – Informa para o FFMPEG que tem que extrair apenas 1 frame do vídeo
thumbnail.jpg – Caminho do arquivo de resultado
Esse processo normalmente é bem rápido, porém dependendo do seu arquivo e quantos frames você quiser extrair pode demorar segundos, minutos ou horas para finalizar o processo.
Conclusão
Então pessoal esse é o guia básico, BEM BÁSICO MESMO sobre o FFMPEG, com você viu é possível realizar diversas atividades com vídeo, mas também é possível fazer trabalhos com áudios e imagens. Ainda tem muita coisa mesmo que pode ser feita com o FFMPEG.
Caso haja interesse, comente abaixo que posso criar documentos mais aprofundados sobre uma área do mundo do FFMPEG.
Até a próxima 
Esse é o primeiro de uma série de artigos sobre HomeLab, onde vou estar abordando os diversos sistemas e configurações para criar o HomeLab do seu jeito e hoje estaremos falando sobre o Jellyfin
E se você estiver se perguntando, o que é um HomeLab? Eu vou te explicar 
Vamos fazer uma reflexão, você tem uma assinatura de músicas, uma para audiolivros, uma para filmes (até mais de uma), uma para armazenamento de arquivos, uma para os seus jogos … Você já parou para pensar que você já não tem mais o controle dos seus dados? Se eu te perguntar onde está o servidor que armazena os seus dados, você saberia me informar? Se você parar de pagar hoje uma dessas assinaturas, você consegue pegar os dados que estão lá facilmente?
Bem essas e outras perguntas incomodam muitos usuários, com isso procuram alternativas para ter mais controle dos seus serviços e não ficar dependendo de alguma empresa que tem o serviço em outro pais, que se mudar suas políticas você perde o serviço. Com isso, esses usuários que tem computadores parados ou mesmo celulares (Sim é possível transformar celular em servidor), criam o seu serviço de serviço particular.
Hoje veremos como você pode ter o seu servidor de mídia pessoal para gerenciar seus arquivos de fotos, vídeos, filmes, músicas, etc … Eu lhes apresento o Jellyfin 
Jellyfin é um sistema de mídia de Software livre (Comente caso queira um artigo sobre licenciamento de software) , que coloca você no controle do gerenciamento e exibição da sua mídia. Com ele é possível ter uma exibição mais organizada dos seus filmes, separando por categorias, com exibição da Thumbnail. Também é possível organizar suas séries, músicas, TV ao vivo e DVR, livros, fotos e ainda é possível sincronizar a exibição de mídia. Tudo isso no seu servidor particular, com seu controle total.
Nesse tutorial estaremos realizando a instalação no Debian 12, mas caso o seu sistema operacional seja diferente, consulte a documentação oficial: https://jellyfin.org/docs/general/installation/
Instalação
A equipe do Jellyfin já criou um script para facilitar a instalação no Debian 12, mas antes de realizar a instalação execute o comando abaixo e realize uma pequena análise no script
curl -s https://repo.jellyfin.org/install-debuntu.sh | less
Obs.: Nunca roda qualquer script no seu computador, sem entender minimamente o que ele faz
Execute o script abaixo para realizar a instalação
curl -s https://repo.jellyfin.org/install-debuntu.sh | sudo bash
No início será feita a identificação do sistema operacional, se estiver tudo certo aperte a tecla “Enter”

Após execução completa do script, será exibido os dados para acessar o Jellyfin pelo navegador, no meu caso será acessível pelo endereço: https://192.168.122.251:8096

Será exibida a tela abaixo para iniciar as configurações do Jellyfin

Configuração
Na tela inicial, selecione o idioma desejado (Tem português do Brasil :D) e clique no botão “Próximo”

Nessa parte, você irá configurar os dados de usuário para acessar o Jellyfin, mas será possível criar outros usuários no final da configuração 

Nessa etapa, será solicitado para configura as mídias (Fotos, vídeos, áudios, etc …), mas vamos deixar para fazer isso após instalação dos plugins 
Clique no botão “Próximo”

Selecione o idioma preferido para os metadados das informações da sua biblioteca, com isso será mais fácil para o Jellyfin realizar o preenchimento automático das informações.

Mantenha a opção “Permitir conexões remotas a este servidor” para permitir conexão remota de outros IP da rede local.
Mantenha a opção “Ativar mapeamento automático de portas”, pois nem sempre essa opção funciona corretamente, será melhor fazer essa configuração no firewall do computador ou roteador.
E clique no botão “Próximo”

Clique no botão “Terminar” para finalizar as configurações básicas.

Pronto! O seu Jellyfin já está funcional para acessar e usar 

Instalando Plugins
Vamos iniciar o processo para instalação de plugins através do repositório. Acesse com o seu usuário e senha criado e clique no botão na esquerda

Clique na opção “Painel” no menu “Administração”

Clique na opção “Catalogo”

Você pode ver nessa diversos plugins que estão disponíveis para instalação, depois explore um pouco essa sessão para verificar quais plugins podem ser interessantes para o seu Homelab 
Vamos realizar a instalação de um plugin chamado “Skin Manager” que irá alterar completamente o layout do nosso Jellyfin, para isso iremos adicionar o um arquivo json criado “Danieladov” com diversos plugins.
Clique na engrenagem ao lado do título “Catálogo”

Nessa tela será exibido o manifest.json do repositório padrão, clique no botão “+” ao lado de “Repositórios”

Preencha os campos abaixo com as seguintes informações:
Nome do repositório: danieladov
URL do repositório: https://raw.githubusercontent.com/danieladov/JellyfinPluginManifest/master/manifest.json
Clique no botão “Salvar”

Clique no botão “OK” para confirmar que confia no repositório

Agora será necessário reiniciar o serviço do Jellyfin, você pode utilizar o comando abaixo no terminal do seu servidor:
sudo systemctl restart jellyfin.service
Acesse novamente o Jellyfin e acesse a tela “Catalogo” e procure por “Skin Manager”

Clique no botão “Instalar”

Clique no botão “Instalar”, para confirmar a instalação do plugin. Essa mensagem sempre será exibida quando for utilizado um plugin que não é o oficial.

Rode o comando abaixo no servidor para reiniciar o serviço do Jellyfin
sudo systemctl restart jellyfin.service
Acesse a tela “Meus plugins” e clique no botão “Skin Manager”

Selecione o skin desejado e clique no botão “Set skin” e aproveite o novo visual 

Adicionando mídias
Agora que já fizemos a instalação, configuração básica e instalação do plugin está na hora de adicionar as nossas mídias (Filmes, fotos, vídeos, etc …) para poder aproveitar o Jellyfin 
Recomendo que seja adicionada uma pasta na raiz “/” separado com os tipos de mídia (Filmes, fotos, vídeos, etc …) ou então um disco externo. Nos meus testes verifiquei que o Jellyfin não navega além de 2 níveis de diretórios, então tome cuidado com a organização dos arquivos.
No meu caso coloquei uma pasta chamada “JELLYFIN” com as subpastas organizadas pelo tipo de arquivo.

Acesse o “Painel” no administração e clique na opção “Biblioteca” dentro do menu “Biblioteca”

Clique no botão “Adicionar Biblioteca de Midia”

Selecione o tipo de conteúdo (Filmes, Séries, Músicas, etc …) dependendo do tipo de conteúdo escolhido vão ser exibidas diversas opções.
Vou escolher “Filmes”

Vou clicar no “+” ao lado de “Pastas” para indicar o local onde estão os filmes

Digite o caminho da pasta ou navegue até o mesmo na opção abaixo e clique no botão “OK”

Normalmente só marco a opção “Preferir títulos incorporados ao invés de nomes de arquivos” e clico no botão “OK”, mas sinta-se a vontade para explorar as outras opções 

Então, será iniciado o processo de carregamento das informações da biblioteca 

Realizando esse procedimento os filmes das pasta serão reconhecidos automaticamente junto com seu nome capa e descrição 

Descrição preenchida automaticamente 

Quero ressaltar que existem diversos clientes para o Jellyfin, então além dos navegadores, tem aplicativo para Android, SmartTV e outros tantos, acesse a lista completa abaixo:
https://jellyfin.org/downloads/
Deixe suas dúvidas abaixo que ficarei muito feliz em responder 
Quem sabe podemos fazer uma parte 2 para detalhar mais configurações do Jellyfin
Até a próxima
]]>As sessões são um conjunto de janelas. Uma analogia pertinente é considerar que uma sessão seja como um espaço de trabalho em ambiente desktop, e cada janela como se fosse um programa dentro de um espaço. A multiplexação de terminal funciona por este mesmo conceito, mas dentro de um terminal. Além disso, as sessões de um multiplexador podem ser desconectadas e recuperadas posteriormente.
Os multiplexadores são populares em servidores, acessados remotamente, onde pode ser necessário preservar sessões mesmo que o administrador se desconecte dele. Entretanto, também podem ser úteis para uso doméstico:
- Funcionalidade de ‘abas’ em qualquer terminal, mesmo os que não implementam essa funcionalidade (por exemplo, o Alacritty)
- Funcionalidade de ‘scroll’ também em qualquer terminal
- Layout de janelas da sessão (divisão horizontal ou vertical)
- Salvar uma sessão em um terminal, restaurar em outro ou deixar o terminal livre para ser fechado
Neste post, vou apresentar o multiplexador GNU Screen. Eu o utilizo para executar processos temporários, mas long-running, como servidores de desenvolvimento (Django, node, Jupyter notebook) e poder liberar o terminal, sem criar serviços de sistema. E também para usar múltiplas janelas no Alacritty.
Instalação
O Screen pode ser instalado no Debian pelo apt: sudo apt install screen e executado pelo comando screen. Será apresentada uma tela de boas-vindas, e logo após estará pronto para uso.
Por padrão, não há nenhuma indicação visual de que o Screen esteja executando. Não há uma linha de status mostrando as janelas, por exemplo. Mas isso pode ser configurado no arquivo ~/.screenrc com as linhas:
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= kG}%-w%{= KW}%n %t%{-}%+w"
Uso interativo
O Screen possui uma tecla prefixo para comandos, que é C-a (Ctrl+a). Para ver a lista completa de combinação de teclas, pressione C-a ?. As combinações que eu considero mais úteis são:.
| Combinação de teclas | Descrição |
|---|---|
| C-a c | Nova janela |
| C-a [num] | Alternar para a janela número [num] |
| C-a " | Selecionar janelas a partir de uma lista |
| C-a | | Divisão vertical |
| C-a S | Divisão horizontal |
| C-a d | Desvincular sessão do terminal |
| C-a k | Fechar a janela atual |
| C-a \ | Encerrar a sessão inteira |
| C-a A | Alterar o título da janela |
| C-a n | Alternar para a janela seguinte |
| C-a p | Alternar para a janela anterior |
| C-a TAB | Alternar entre regiões das divisões |
| C-a X | Fechar a região atual |
| C-a ESC | Modo ‘copy’ |
| C-a ? | Ajuda |
Ao invés de combinações de teclas, os comandos também podem ser executados pelo nome através do colon (modo de comando), ativado pela combinação C-a :. Neste modo, é possível digitar o nome do comando, como title para alterar o título da janela.
O modo ‘copy’ habilita a movimentação na janela do terminal usando as teclas vim. Até onde sei, não há uma ajuda interna com as teclas disponíveis no copy-mode, mas o manual tem a lista completa.
Linha de comando
Após desvincular a sessão do terminal (C-a d), é possível utilizar a linha de comando do Screen das seguintes formas:
screen -ls: Mostra as sessões criadas
screen -S [nome]: Cria uma nova sessão chamada [nome]
screen -r [nome]: Vincula novamente uma sessão desvinculada, [nome] pode ser apenas os caracteres iniciais
Outras opções mais avançadas podem ser vistas no manual: man screen.
Configuração
O Screen pode ser configurado através do arquivo .screenrc. Um exemplo com as configurações padrão pode ser encontrado em /usr/share/doc/screen/examples/screenrc. O mais importante seria ter uma linha hardstatus informativa, como visto na seção de instalação.
Conclusão
Multiplexadores de terminal são úteis para aumentar a eficiência e controle ao trabalhar na linha de comando. Permitem organizar sessões e janelas por contexto, desvincular as sessões do terminal e dividir a tela e alternar entre múltiplos painéis.
Referências
How to use GNU SCREEN (video)
]]>
WordPress completo em docker
Boa noite a todos.
Estarei mostrando um arquivo docker-compose.yml.
O que ele faz?
Criar 2 container sendo um wordpress e outro mysql e com volumes para ambos.
Porque estou usando docker em vez de virtualBox ou outro ?
Os containers são uma tecnologia de virtualização que permite empacotar e executar aplicativos e suas dependências de forma isolada. Ao contrário das máquinas virtuais, que virtualizam o hardware e incluem um sistema operacional completo, os containers compartilham o núcleo do sistema operacional do host.
Em resumo, os containers oferecem uma alternativa mais eficiente em termos de recursos e mais ágil em comparação com as máquinas virtuais, tornando-se uma escolha popular para o desenvolvimento, implantação e gerenciamento de aplicativos em ambientes modernos de computação.
Requisitos
Na sua maquina você precisará ter instalado o docker e docker-compose. Faça uma pesquisa sobre a instalação do mesmo para o seu sistema operacional.
Como implementar?
Crier um diretorio | pasta, entre na pasta e crier um arquivo chamado: docker-compose.yml, conforme abaixo:
#---------------------------------- HEADER --------------------------------------|
# AUTOR : Edivan Carvalho
# HOMEPAGE :
# DATA DE CRIAÇÃO : 21/11/2023
# PROGRAMA : Script para docker-compose.yml.
# VERSÃO : 1.0.0
# LICENÇA : MIT, DEBXP
# PEQUENA DESCRIÇÃO : Instalação de Feramentas de Desenvolvimento do WordPress.
#
# CHANGELOG : Este documento relatar a instalação dos do ambiente de desenvolvimento
# com WordPress e mysql juntos.
#
#---------------------------------------------------------------------------------|
version: '3.7'
services:
database:
image: mysql:5.7
container_name: mysql-teste2
restart: always
environment:
MYSQL_DATABASE: 'db_word'
MYSQL_USER: 'suporte'
MYSQL_PASSWORD: 'suporte'
MYSQL_ROOT_PASSWORD: 'root'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- './volumes/mysql:/var/lib/mysql'
wordpress:
image: wordpress:latest
container_name: wordpress-teste # Adicionado o nome do container aqui
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql-teste2:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 'root'
WORDPRESS_DB_NAME: db_word
volumes:
- ./wordpress:/var/www/html
Para editar o código eu gosto de usar o VSCode, escolhar uma IDE de sua escolhar. Apos abrar um terminal e rode o seguinte comando: docker-compose up, Assim o docker automaticamente ira criar 2 container conforme a imagem:

Assim seus container já estão prontos para uso, com o seu navegador de sua esolhar https://localhost:8080/ ai só seguir com os passos padrão da instalação.
Para acessar a area de admin usar a url https://localhost:8080/wp-admin ai efetuar login com o usuario e senha que foi criado no passo anterior.
Para acessar o banco de dados voce pose usar um Cliente de Banco de dados tipo: dbeaver, workbench, ai o céu o limite para você.
Bom espero que esse documento seja util para você.
]]>
O que é o XMPP?
O termo XMPP é a abreviação de eXtensible Messaging and Presence Protocol (Protocolo Extensível de Mensagens e Presença). Entre outras coisas, ele permite, principalmente, a troca de mensagens entre usuários (Mensageria) e informações de Presença, como status de online, offline, afastado; uma nota de presença; e informação do humor atual.
Ele é um protocolo padronizado. Seu núcleo foi padronizado através de RFCs, definidas pela Internet Engineering Task Force (IETF), um grupo internacional que promove padrões para a internet. Existem também as XEPs que o padronizam, definidas pela XMPP Standards Foundation (XSF), e nós veremos o que é uma XEP mais adiante.
Decentralização
Na maior parte das plataformas mais conhecidas (WhatsApp, Facebook Messenger, Discord, Telegram…), a mensagem passa por um intermediador central. Isso é conhecido como modelo centralizado e pode ser entendido no seguinte diagrama:

Já o XMPP opera de maneira parecida com e-mail:

- No exemplo acima, Alice e Carlos podem se comunicar via XMPP usando o mesmo servidor, de maneira similar ao modelo centralizado.
- No entanto, se Alice quiser se comunicar com Bob, a comunicação será intermediada entre dois servidores (como se fosse e-mail: uma comunicação entre Gmail e Hotmail, por exemplo). Nesse caso, um servidor encaminha para o outro as mensagens.
- Isso vale para ambos Alice, Bob, Carlos, Diego e Elisa entre si.
Aberto: vários servidores, vários clientes
Por ser um protocolo aberto e padronizado, é possível implementar vários clientes para a comunicação com servidores, e também vários softwares-servidor. O leitor pode estar pouco familiarizado com isso, mas vamos explicar um pouco mais devagar.
Nos diagramas anteriores, omitimos uma peça essencial: o cliente. Ele pode ser interpretado como o "aplicativo" que Alice (ou Bob) estão usando para se comunicar via XMPP. Por exemplo, você pode estar lendo esse texto de algum dos diversos clientes web: Firefox, Chromium, ou outro. Assim como você pode ter vários clientes web, você pode ter vários clientes XMPP.
Existem uma série deles, os quais o leitor pode escolher para usar XMPP. Vamos listar alguns, baseados em software livre:
Mas, antes de continuarmos falando deles e de quais escolher, vamos falar das XEPs.
Extensibilidade: o que são as XEPs?
O X em XMPP quer dizer "extensível". Essa extensibilidade ocorre através das XEPs. "XEP", abreviação para "XMPP Extension Protocol" (Protocolo de Extensão XMPP), é como uma ideia para adicionar uma nova funcionalidade ao XMPP. Por exemplo, as seguintes funcionalidades são XEPs:
- XEP-0045 (Multi-User Chat): permite a criação de salas com mais de um usuário (similar aos "grupos" do Telegram e do WhatsApp).
- XEP-0084 (User Avatar): permite a troca de avatares de usuários (ou seja, no exemplo, Alice enviaria o avatar dela para Bob, e vice-versa).
- XEP-0107 (User Mood): especifica a comunicação de humor entre os usuários.
- XEP-0384 (OMEMO Encryption): especifica criptografia de mensagens entre clientes.
- E muitas outras mais.
Cada uma delas define tanto seu propósito, como uma ideia para sua implementação. As XEPs passam por um período de análise, passando por diversos estágios até serem consideradas em estágio "final" ou "ativo" (quando foram bem-sucedidas). Apesar disso, algumas que estão em estágio "experimental" já são amplamente utilizadas (como a que define a criptografia OMEMO).
Outro ponto importante de se entender é que as XEPs podem ser definidas para clientes e/ou servidores. Portanto, é importante escolher um conjunto de cliente+servidor para sua experiência que contemplem as XEPs essenciais para seu uso. Por exemplo:
- Um servidor sem suporte à XEP que define chat multiusuário pode te deixar sem a possibilidade de criar uma sala para conversar com seus amigos.
- Um cliente sem suporte à criptografia OMEMO pode te deixar com conversas sem criptografia, e comprometer sua privacidade (uma vez que os servidores intermediários terão acesso ao conteúdo das mensagens).
Como criar uma conta?
-
Escolhendo um servidor.
Agora que entendemos o que são as XEPs, vamos selecionar um servidor que seja compatível com 100% delas, para simplificar as coisas.- Acesse uma lista de servidores XMPP, como https://providers.xmpp.net (particularmente, gosto muito desse). Ou: https://list.jabber.at, https://xmpp.404.city, https://xmpp.love.
- Verifique, para cada servidor, a compliance em https://compliance.conversations.im. Por exemplo, verificamos que o servidor 01337.io não tem suporte a todas as XEPs, o que o desqualificaria para nossa seleção.
- Obviamente, você pode se inscrever em um servidor que não suporte todas as XEPs, mas essa é uma escolha que deve ser feita com sabedoria, considerando seus conhecimentos sobre as XEPs e sua capacidade de prever seu caso de uso.
- Faça isso até encontrar os servidores com 100% de compatibilidade, ou, alternativamente:
- Considere os servidores sugeridos aleatoriamente na página inicial do https://compliance.conversations.im.
- Ou então os de categoria A e B em https://providers.xmpp.net (leia as ressalvas dos que estão na B).
No entanto, ao fazê-lo, você com certeza encontrará vários servidores que possuem 100% de compatibilidade com as XEPs. A partir daí, você poderá empregar alguns critérios de "desempate" para decidir em qual deles fará sua conta. Dentre eles:
- Local onde é hospedado e leis relacionadas à proteção de dados.
- Políticas de criação de contas.
- Se a conta pode ser recuperada em caso de perda da senha.
- Se a conta é deletada após algum período de inatividade.
- Possibilidades de contato com o administrador do servidor, e se ele fala uma língua que você também fala.
- Tempo de existência do servidor e perspectiva de continuidade do serviço.
Tudo isso pode ser buscado no site do servidor selecionado.
- Instalando um cliente.
Existem vários clientes disponíveis. Pessoalmente, eu uso Gajim no meu GNU+Linux e Conversations no smartphone, e percebo uma boa adoção às XEPs a partir deles. -
Criando uma conta.
Depois de escolhido o servidor, é hora de criar a conta. Existem duas formas de fazê-lo:- No cliente instalado, caso o servidor suporte a XEP que diz respeito à criação de contas pelo cliente.
- No site do servidor.
Ao criar a conta, atente-se para o nome de usuário, que será único e imutável. Depois de criada a conta, você terá um Jabber ID (abreviado para JID), no estilo de e-mail:
usuario@servidor.tld. - Acessando a sua conta. Para acessar sua conta, simplesmente insira seu Jabber ID e sua senha em um cliente e faça o login. Você pode usar diversos clientes com a mesma conta.
- Adicionando contatos e iniciando conversas.
Para adicionar um contato, você precisa do Jabber ID (JID) dele, assim como em um e-mail você precisaria do endereço completo. Após isso, é só adicionar através do seu cliente selecionado.
Essas são as informações básicas para começar a usar o XMPP. Em outros tutoriais, eu poderei explicar alguns outros conceitos após a criação de conta: como usar criptografia para conversar de maneira privada; como usar os recursos de presença e de humor; entre outros. Enquanto isso, acredito que o leitor poderá, autonomamente, descobrir os principais recursos desse excelente protocolo! 
Liberdade e inovação
Vamos conhecer juntos a proposta que desafia as big techs com Software Livre.
Quando
Sábado, 1 de julho, às 14h (UTC-3)
Onde
Transmissão ao vivo no Youtube
Como assistir
- Aqui, nesta página
- No canal debxp, no Youtube
- No seu GNU/Linux com o player MPV:
mpv https://youtube.com/live/gjZge_7Sp8s
Como interagir com os participantes
- Chat do Youtube nas apresentações
- Sala #debxp no servidor irc.libera.chat:6697
- Sala #debxp no web.libera.chat
Ao vivo, toda terça, às 20h UTC-3
Aulas anteriores
Dúvidas
Nas issues do repositório do curso
Material de apoio
Em texto:
Em vídeo:
Quanto custa
É di grátis.
Mas quem paga por isso?
As pessoas que apoiam o nosso trabalho:
- Livros à venda
- Apoio mensal
- PIX: pix@blauaraujo.com
Neste sábado, 10 de junho, a partir das 14h, vai rolar uma transmissão ao vivo para celebrar o lançamento da nova versão estável do Debian, batizada de "bookworm".
Quando
Sábado, 10 de junho, a partir das 14h (UTC-3).
Onde
No canal debxp, no Youtube
Como assistir
- Nesta postagem
- No canal debxp
- Pelo
mpv, no conforto do seu sistema:
mpv https://youtube.com/live/I0B8mCfF8cQ
Como interagir
- Pelo chat da transmissão
- Pela sala
#debxp, no servidor irc.libera.chat:6697 - Pela sala
#debxp, no web.libera.chat
Com as participações de Sergio Amadeu e Lucas Zawacki
Links recomendados
- Texto atual do PL2630
- Sem órgão regulador, PL 2630 dará ainda mais poder às big techs
- O PL 2630 é bom, e por isso tão atacado
- A guerra das plataformas contra o PL2630
Redes do Lucas Zawacki
- Twitter: https://twitter.com/lfzawacki
- Youtube: https://www.youtube.com/@lucaszawacki
- Twitch: https://www.twitch.tv/lucaszawacki
Redes da Soberana:
- Manifesto: https://soberanatv.github.io/
- Discord: https://discord.gg/soberana
- Instagram: https://instagram.com/soberana.tv/
Realização
- Canal debxp
- UBL – Universidade Brasileira Livre: (Twitch) (GitHub)
Quando
Domingo, 7 de maio de 2023 a partir das 9:00h UTC-3
Onde
As transmissões serão feitas pelo canal debxp, no Youtube.
Como assistir
- Aqui, nesta página
- No canal debxp, no Youtube
- No seu GNU/Linux com o player MPV:
mpv link-da-apresentação
Apresentações
| Horário | Participante | Link |
|---|---|---|
| 9:00 | Blau Araujo | Em busca de uma computação soberana |
| 10:00 | César Brod | Me mandaram para Cuba… e eu fui! |
| 11:00 | Corinto Meffe | Cenários para as tecnologias livres e abertas |
| 13:00 | Bárbara Tostes | Empreendendo com Software Livre |
| 14:00 | Lucas Eduardo | A importância dos padrões abertos |
| 15:00 | Paulo Kretcheu | Iluminando seu caminho |
| 16:00 | Felipe "Juca" Sanches | Vivendo o sonho do Software Livre |
| 17:00 | Diálogos | Liberdade é para pessoas |
Como interagir com os participantes
- Chat do Youtube nas apresentações
- Sala #debxp no servidor irc.libera.chat:6697
- Sala #debxp no web.libera.chat
Realização
- Canal debxp
- UBL – Universidade Brasileira Livre: (Twitch) (GitHub)