
Outro dia entrei no https://linux-br.org e olhei as postagens. E percebi que a última tinha sido dia 28 de dezembro de 2025. Bem na época em que fiz upgrade do sistema operacional. Algo que sempre deixo pra fazer nessa época de festas de fim de ano. Época essa que também aproveito e tiro férias.
Hoje fui olhar nos logs e...
Traceback (most recent call last):
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 17, in
from googletrans import Translator
ModuleNotFoundError: No module named 'googletrans'
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:138: SyntaxWarning: invalid escape sequence '\.'
elif re.search("[ \.,]" + word.lower() + "$", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:141: SyntaxWarning: invalid escape sequence '\.'
elif re.search("^" + word.lower() + "[ \.,]", text.lower()):
Traceback (most recent call last):
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 17, in
from googletrans import Translator
ModuleNotFoundError: No module named 'googletrans'
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:138: SyntaxWarning: invalid escape sequence '\.'
elif re.search("[ \.,]" + word.lower() + "$", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:141: SyntaxWarning: invalid escape sequence '\.'
elif re.search("^" + word.lower() + "[ \.,]", text.lower()):
Traceback (most recent call last):
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 17, in
from googletrans import Translator
ModuleNotFoundError: No module named 'googletrans'
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:135: SyntaxWarning: invalid escape sequence '\.'
if re.search("[ \.,]" + word.lower() + "[ \.,]", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:138: SyntaxWarning: invalid escape sequence '\.'
elif re.search("[ \.,]" + word.lower() + "$", text.lower()):
/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py:141: SyntaxWarning: invalid escape sequence '\.'
elif re.search("^" + word.lower() + "[ \.,]", text.lower()):
Traceback (most recent call last):
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 17, in
from googletrans import Translator
ModuleNotFoundError: No module named 'googletrans'
Então está faltando esse módulo googletrans. Coisa simples.
❯ apt-cache search googletrans
❯
Ooops... não tão simples assim. Então troquei o script que rodava como python3 pra uv, que fiquei fanzasso. Fui rodar e...
❯ /home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py --config=/home/helio/.config/linux-br.org-autonews-bot/config
INFO:linuxbrnewsgenerator.py:Starting at: Thu May 14 14:50:15 2026
DEBUG:linuxbrnewsgenerator.py:"Picks, Shovels, and the Bill of Materials – Supply Chain Pain Points" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Picks, Shovels, and the Bill of Materials – Supply Chain Pain Points
DEBUG:linuxbrnewsgenerator.py:"Show HN: A whiteboard for your AI coding agent [video]" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Show HN: A whiteboard for your AI coding agent [video]
DEBUG:linuxbrnewsgenerator.py:"EasyDMARC Alternative: Why Teams Are Switching" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: EasyDMARC Alternative: Why Teams Are Switching
DEBUG:linuxbrnewsgenerator.py:"LLM Targeted Underperformance Disproportionately Impacts Vulnerable Users" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: LLM Targeted Underperformance Disproportionately Impacts Vulnerable Users
DEBUG:linuxbrnewsgenerator.py:"Psychosocial Impact of Covid-19 on Intensive Care Unit Personnel" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Psychosocial Impact of Covid-19 on Intensive Care Unit Personnel
DEBUG:linuxbrnewsgenerator.py:"Self-report fraud and walk free, New York prosecutors tell Wall Street" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Self-report fraud and walk free, New York prosecutors tell Wall Street
DEBUG:linuxbrnewsgenerator.py:"Metal Gear Solid Peace Walker" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Metal Gear Solid Peace Walker
DEBUG:linuxbrnewsgenerator.py:"So you want to deploy Falcon / FN-DSA for small post-quantum signatures" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: So you want to deploy Falcon / FN-DSA for small post-quantum signatures
DEBUG:linuxbrnewsgenerator.py:"Wait, Am I a Vampire?" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Wait, Am I a Vampire?
DEBUG:linuxbrnewsgenerator.py:"Subquadratic Model Performance and Architecture Evaluation [pdf]" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Subquadratic Model Performance and Architecture Evaluation [pdf]
DEBUG:linuxbrnewsgenerator.py:"Benchmarking Subquadratic's latest model and SSA Kernel" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: Benchmarking Subquadratic's latest model and SSA Kernel
DEBUG:linuxbrnewsgenerator.py:"Slack having issues with Messaging, API" [SCORE: 1]
INFO:linuxbrnewsgenerator.py:Ranking: [API] 1
INFO:linuxbrnewsgenerator.py:Interested article: Slack having issues with Messaging, API
INFO:linuxbrnewsgenerator.py:Too short summary for: Slack having issues with Messaging, API (DISCARDED)
DEBUG:linuxbrnewsgenerator.py:"The Navigator Trackpad is here" [SCORE: 0]
INFO:linuxbrnewsgenerator.py:Not related to something we might like, so we skip: The Navigator Trackpad is here
DEBUG:linuxbrnewsgenerator.py:"Dude where's my password? Claude reunites forgetful stoner with $400k Bitcoin" [SCORE: 1]
INFO:linuxbrnewsgenerator.py:Ranking: [bitcoin] 1
INFO:linuxbrnewsgenerator.py:Interested article: Dude where's my password? Claude reunites forgetful stoner with $400k Bitcoin
INFO:linuxbrnewsgenerator.py:translating: Dude where's my password? Claude reunites forgetful stoner with $400k Bitcoin
Traceback (most recent call last):
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 508, in
news.run()
~~~~~~~~^^
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 259, in run
self.articles = self.getArticles()
~~~~~~~~~~~~~~~~^^
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 306, in getArticles
translated_summary = self.translate_article(summary)
File "/home/helio/linux-br.org-news-bot/linuxbrnewsgenerator.py", line 348, in translate_article
if translated_content.text == text:
^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'coroutine' object has no attribute 'text'
:0: RuntimeWarning: coroutine 'Translator.translate' was never awaited
Uma pausa pro momento "tasqueopariu".

Então atualizaram a biblioteca pra asyncio e... eu tenho de me virar com isso agora?
Bom... então tá. No fim acabei mexendo pra caramba e atualizei tudo. Parece que os posts estão de volta ao ar. Como levei 5 meses pra perceber isso (5 meses e MEIO), se algo der errado, só daqui outros 5 meses. Tudo em nome da eficiência.
O código novo já está lá no CodeBerg:
E fui fazer o upgrade do linux-br.org pra joomla4 e... deu ruim.

Ainda estou tentando descobrir como corrigir antes de apelar pra reverter o backup.

Depois de um logo tempo sem mexer no Linux-BR, finalmente dei o tapa que precisava pra renovar o site. Não só de tema. Foi absolutamente de tudo.
Eu passei um tempo tentando resolver os problemas que vieram depois do upgrade pro Joomla4. Os mesmo problemas eu não tive aqui no blog, mas não sei dizer o motivo. E também eu queria automatizar mais os posts de notícias. E passei um tempo tentando fazer funcionar no Joomla4 com API, XML-RPC... tudo quando foi jeito. E nada. Fracassei miseravelmente em todas as minhas tentativas.
Daí resolvi chutar o balde e partir pra mudar tudo. Subi um container localmente com o backup do Joomla e fiz uma migração pro WordPress. Isso mesmo, WordPress. Tudo que eu precisava fazer funcionar estava lá, e funcionando: site, notícias, API, tudo! Bom... quase tudo. Mas eu já chego lá. Com o site rodando localmente instalei e migrei os dados. Olhei como tinha ficado e parti pro site novo. Botei no ar.
Em seguida foi fazer um bot pra postar notícias. Essa parte não foi tão fácil como imaginei. Até que foi, mas eu apanhei bastante pra descobrir como subir imagem no post. O código está disponível aqui:
https://github.com/helioloureiro/linux-br.org-news-bot
Eu usei um plugin de JWT, JSON Web-Token, pra gerar um token de acesso. Isso tornou a vida mais fácil, assim como uso da API.
Eu ainda preciso melhorar pra filtrar alguns posts que eu pego do hacker news, mas tudo funciona agora de forma automática. Claro que ainda podemos enviar posts manualmente. E aindei fazendo isso. Mas o grosso das notícias vem de fora (o que traz algumas vezes coisas não muito relacionadas com o tema do site e precisa de uma curadoria manual).
O próximo passo é tentar fazer uma seleção de tags por post pra ajudar a mapear.
E o melhor de tudo... eu usei ajuda do ChatGPT pra conseguir fazer tudo. Ou quase tudo.

Ele me deu umas dicas furadas pra parte de imagem, que consegui resolver achando um artigo que usava curl pra isso:
https://dev.to/dennislwm/deploy-a-wordpress-pipeline-to-minimize-and-upload-images-28k2
No fim deu tudo certo e o site e bot de notícias estão no ar. Agora é aguardar por notícias, criar outro bot pra publicar no Mastodon e fazer aquele filtro maroto. Ah! E claro tentar arrumar o que realmente faltou: disqus. O plugin não existe pra Joomla4, mas tem suporte pra WordPress. Só que não funcionou muito bem quando instalei e agora está dando uns erros bizarros. Algo pra olhar com calma durante o feriado de Páscoa.
Irei mudar o site pra WordPress? Ainda não. E não tenho planos pra isso. Eu tenho uma relação emocional com o Joomla, desde a época do MamboServer. Será difícil cortar essa relação assim. Mas agora tenho o Linux-BR pra comparar.
Enquanto isso, curtimos a Páscoa sueca com neve.

