Recentemente eu descobri que minha conta corporativa no Google, que uso pra gerenciar o loureiro.eng.br no geral, custa muito caro pra aumentar o tamanho do storage. Mas muito.
Então resolvi voltar a usar minha conta genérica do Google/Gmail pra colocar fotos e tudo mais que estava entupindo meu espaço virtual no loureiro.eng.br e afetando o serviço de email entre outras coisas.
Passei então a baixar os albuns que tinha lá, abrir o arquivo em formato zip, extrair os dados e subir na conta genérica que agora tem 200 GB de espaço.
Mas eis que...
$ unzip Sexta-feira\ de\ manhã-001.zip Archive: Sexta-feira de manhã-001.zip checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2787_1553588194745_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2815_1553588196860_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2733_1553287304138_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2765_1553588192848_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2805_1553588196125_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2766_1553588192990_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2804_1553588196053_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2737_1553287304362_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2816_1553588196891_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2772_1553588193399_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2789_1553588194826_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2792_1553588195166_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2802_1553588195831_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2769_1553588193183_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2735_1553287304243_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2764_1553588192788_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2809_1553588196428_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2793_1553588195213_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2781_1553588194244_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2814_1553588196818_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2785_1553588194565_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2784_1553588194484_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2812_1553588196668_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2779_1553588194000_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2813_1553588196753_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2771_1553588193350_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2770_1553588193282_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2734_1553287304192_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2776_1553588193839_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2811_1553588196578_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2782_1553588194320_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2732_1553287303926_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2810_1553588196503_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2774_1553588193500_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2780_1553588194048_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2795_1553588195371_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2736_1553287304300_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2808_1553588196356_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2767_1553588193040_high.JPG. checkdir error: cannot create Sexta-feira de manh+� Illegal byte sequence unable to process Sexta-feira de manh+�/GOPR2817_1553588197051_high.MP4.
Um erro de utf-8 no MacOS. O nome do álbum é "Sexta-feira de manhã". É, faltou um pouco de criatividade aqui. E o unzip no MacOS não consegue de jeito nenhum resolver isso. Mais provavelmente por limitação do APFS, o filesystem da Apple (que não é lá grande coisa).
Buscando na Internet achei uma referência aqui: https://github.com/adamhathcock/sharpcompress/issues/315
Então basicamente eu usei o "ditto" pra resolver meu problema.
$ mkdir recuperação $ cd recuperação/ $ ditto -V -x -k --sequesterRsrc --rsrc ../Sexta-feira\ de\ manhã-001.zip . >>> Copying ../Sexta-feira de manhã-001.zip copying file Sexta-feira de manhã/GOPR2787_1553588194745_high.JPG ... 467431 bytes for Sexta-feira de manhã/GOPR2787_1553588194745_high.JPG copying file Sexta-feira de manhã/GOPR2815_1553588196860_high.JPG ... 510835 bytes for Sexta-feira de manhã/GOPR2815_1553588196860_high.JPG copying file Sexta-feira de manhã/GOPR2733_1553287304138_high.JPG ... 761484 bytes for Sexta-feira de manhã/GOPR2733_1553287304138_high.JPG copying file Sexta-feira de manhã/GOPR2765_1553588192848_high.JPG ... 468822 bytes for Sexta-feira de manhã/GOPR2765_1553588192848_high.JPG copying file Sexta-feira de manhã/GOPR2805_1553588196125_high.JPG ... 787425 bytes for Sexta-feira de manhã/GOPR2805_1553588196125_high.JPG copying file Sexta-feira de manhã/GOPR2766_1553588192990_high.JPG ... 1058611 bytes for Sexta-feira de manhã/GOPR2766_1553588192990_high.JPG copying file Sexta-feira de manhã/GOPR2804_1553588196053_high.JPG ... 995234 bytes for Sexta-feira de manhã/GOPR2804_1553588196053_high.JPG copying file Sexta-feira de manhã/GOPR2737_1553287304362_high.JPG ... 1011534 bytes for Sexta-feira de manhã/GOPR2737_1553287304362_high.JPG copying file Sexta-feira de manhã/GOPR2816_1553588196891_high.JPG ... 511600 bytes for Sexta-feira de manhã/GOPR2816_1553588196891_high.JPG copying file Sexta-feira de manhã/GOPR2772_1553588193399_high.JPG ... 823201 bytes for Sexta-feira de manhã/GOPR2772_1553588193399_high.JPG copying file Sexta-feira de manhã/GOPR2789_1553588194826_high.JPG ... 822008 bytes for Sexta-feira de manhã/GOPR2789_1553588194826_high.JPG copying file Sexta-feira de manhã/GOPR2792_1553588195166_high.JPG ... 1876322 bytes for Sexta-feira de manhã/GOPR2792_1553588195166_high.JPG copying file Sexta-feira de manhã/GOPR2802_1553588195831_high.JPG ... 914018 bytes for Sexta-feira de manhã/GOPR2802_1553588195831_high.JPG copying file Sexta-feira de manhã/GOPR2769_1553588193183_high.JPG ... 675609 bytes for Sexta-feira de manhã/GOPR2769_1553588193183_high.JPG copying file Sexta-feira de manhã/GOPR2735_1553287304243_high.JPG ... 1699626 bytes for Sexta-feira de manhã/GOPR2735_1553287304243_high.JPG copying file Sexta-feira de manhã/GOPR2764_1553588192788_high.JPG ... 2014672 bytes for Sexta-feira de manhã/GOPR2764_1553588192788_high.JPG copying file Sexta-feira de manhã/GOPR2809_1553588196428_high.JPG ... 2000556 bytes for Sexta-feira de manhã/GOPR2809_1553588196428_high.JPG copying file Sexta-feira de manhã/GOPR2793_1553588195213_high.JPG ... 988673 bytes for Sexta-feira de manhã/GOPR2793_1553588195213_high.JPG copying file Sexta-feira de manhã/GOPR2781_1553588194244_high.JPG ... 2254617 bytes for Sexta-feira de manhã/GOPR2781_1553588194244_high.JPG copying file Sexta-feira de manhã/GOPR2814_1553588196818_high.JPG ... 1815341 bytes for Sexta-feira de manhã/GOPR2814_1553588196818_high.JPG copying file Sexta-feira de manhã/GOPR2785_1553588194565_high.JPG ... 2126053 bytes for Sexta-feira de manhã/GOPR2785_1553588194565_high.JPG copying file Sexta-feira de manhã/GOPR2784_1553588194484_high.JPG ... 1961346 bytes for Sexta-feira de manhã/GOPR2784_1553588194484_high.JPG copying file Sexta-feira de manhã/GOPR2812_1553588196668_high.JPG ... 1007050 bytes for Sexta-feira de manhã/GOPR2812_1553588196668_high.JPG copying file Sexta-feira de manhã/GOPR2779_1553588194000_high.JPG ... 1612054 bytes for Sexta-feira de manhã/GOPR2779_1553588194000_high.JPG copying file Sexta-feira de manhã/GOPR2813_1553588196753_high.JPG ... 2126066 bytes for Sexta-feira de manhã/GOPR2813_1553588196753_high.JPG copying file Sexta-feira de manhã/GOPR2771_1553588193350_high.JPG ... 378743 bytes for Sexta-feira de manhã/GOPR2771_1553588193350_high.JPG copying file Sexta-feira de manhã/GOPR2770_1553588193282_high.JPG ... 1995866 bytes for Sexta-feira de manhã/GOPR2770_1553588193282_high.JPG copying file Sexta-feira de manhã/GOPR2734_1553287304192_high.JPG ... 1689565 bytes for Sexta-feira de manhã/GOPR2734_1553287304192_high.JPG copying file Sexta-feira de manhã/GOPR2776_1553588193839_high.JPG ... 1793406 bytes for Sexta-feira de manhã/GOPR2776_1553588193839_high.JPG copying file Sexta-feira de manhã/GOPR2811_1553588196578_high.JPG ... 2326771 bytes for Sexta-feira de manhã/GOPR2811_1553588196578_high.JPG copying file Sexta-feira de manhã/GOPR2782_1553588194320_high.JPG ... 2258922 bytes for Sexta-feira de manhã/GOPR2782_1553588194320_high.JPG copying file Sexta-feira de manhã/GOPR2732_1553287303926_high.JPG ... 2001698 bytes for Sexta-feira de manhã/GOPR2732_1553287303926_high.JPG copying file Sexta-feira de manhã/GOPR2810_1553588196503_high.JPG ... 2709410 bytes for Sexta-feira de manhã/GOPR2810_1553588196503_high.JPG copying file Sexta-feira de manhã/GOPR2774_1553588193500_high.JPG ... 2058495 bytes for Sexta-feira de manhã/GOPR2774_1553588193500_high.JPG copying file Sexta-feira de manhã/GOPR2780_1553588194048_high.JPG ... 1882808 bytes for Sexta-feira de manhã/GOPR2780_1553588194048_high.JPG copying file Sexta-feira de manhã/GOPR2795_1553588195371_high.JPG ... 2403193 bytes for Sexta-feira de manhã/GOPR2795_1553588195371_high.JPG copying file Sexta-feira de manhã/GOPR2736_1553287304300_high.JPG ... 1576599 bytes for Sexta-feira de manhã/GOPR2736_1553287304300_high.JPG copying file Sexta-feira de manhã/GOPR2808_1553588196356_high.JPG ... 2032676 bytes for Sexta-feira de manhã/GOPR2808_1553588196356_high.JPG copying file Sexta-feira de manhã/GOPR2767_1553588193040_high.JPG ... 2080346 bytes for Sexta-feira de manhã/GOPR2767_1553588193040_high.JPG copying file Sexta-feira de manhã/GOPR2817_1553588197051_high.MP4 ... 351123 bytes for Sexta-feira de manhã/GOPR2817_1553588197051_high.MP4
Nada muito simples, mas funciona e fica aqui registrado pra futura referência.
ditto -V -x -k --sequesterRsrc --rsrc arquivo.zip diretório_destino
Foi selecionado pra falar na BSD Day 2023. E o assunto? Mastodon! Vou falar da rede federada assim como os programas mais legais pra usar e automatizar a brincadeira.
Mais informações sobre o evento: https://www.bsdday.com.br
Eu já escrevi sobre isso em Linux com Intel (Usando a GPU para renderizar vídeo) e depois em Linux com NVIDIA (Renderizando as fotos da GoPro em vídeo mpeg4 com ffmpeg e NVIDIA). Agora eu testei como fazer isso no MacOS.
E deu muito certo.
O comando e saída foram esses:
$ ffmpeg -r 1 -i G%04d.JPG -c:v h264_videotoolbox -b:v 5M -pix_fmt yuv420p output.mp4 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers built with Apple clang version 14.0.3 (clang-1403.0.22.14.1) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/6.0 --enable-shared --enable-pthreads
--enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls
--enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
--enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband
--enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora
--enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp
--enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma
--enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex
--enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
--enable-videotoolbox --enable-neon libavutil 58. 2.100 / 58. 2.100 libavcodec 60. 3.100 / 60. 3.100 libavformat 60. 3.100 / 60. 3.100 libavdevice 60. 1.100 / 60. 1.100 libavfilter 9. 3.100 / 9. 3.100 libswscale 7. 1.100 / 7. 1.100 libswresample 4. 10.100 / 4. 10.100 libpostproc 57. 1.100 / 57. 1.100 Input #0, image2, from 'G%04d.JPG': Duration: 00:03:05.08, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 4000x3000, 25 fps, 25 tbr, 25 tbn File 'output.mp4' already exists. Overwrite? [y/N] y Stream mapping: Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (h264_videotoolbox)) Press [q] to stop, [?] for help [swscaler @ 0x130018000] deprecated pixel format used, make sure you did set range correctly [swscaler @ 0x128478000] deprecated pixel format used, make sure you did set range correctly [swscaler @ 0x138008000] deprecated pixel format used, make sure you did set range correctly [swscaler @ 0x108e58000] deprecated pixel format used, make sure you did set range correctly Output #0, mp4, to 'output.mp4': Metadata: encoder : Lavf60.3.100 Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt470bg/unknown/unknown, progressive), 4000x3000, q=2-31, 5000 kb/s, 1 fps, 16384 tbn Metadata: encoder : Lavc60.3.100 h264_videotoolbox frame= 4627 fps= 21 q=-0.0 Lsize= 2824030kB time=01:17:06.00 bitrate=5001.0kbits/s speed=21.5x video:2823985kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.001582%
O que fez a mágica aqui foi o parâmetro "h264_videotoolbox". Juntei 4626 imagens JPEG da última pedalada que fizemos em um vídeo de pouco mais de 1 hora. E agora vou trabalhar em cima pra fazer o vídeo no formato adequado, trilha sonora e tamanho menor.
Um dos motivos de ter escrito pouco aqui é que entre outras coisas estou trabalhando os vídeos da conferência do ano passado pra serem liberados.
E estão. Já acabei de re-renderizar novamente os vídeos com a introdução (pra adicionar patrocinadores, uma descrição do vídeo, etc) e subi pro YouTube. E fiz outro script pra enviar aos autores pra verificarem seus vídeos e confirmarem.
E aqui estou eu lá nos lightning talks.
Os vídeos estão indo pro ar conforme são aprovados, mas já pode ver o que foi publicado seguindo a playlist:
Com a migração pra rede Mastodon, eu agora sigo alguns bots que postam notícias, como esse do UOL que postou uma notícia sobre tubarões.
O problema é só com os links encurtados pelo t.co do Twitter. Eles simplesmente não funcionam no tor-browser. Simplesmente não consigo receber o destino desses links.
A solução que encontrei foi criar um pequeno script em CGI usando python que recebe a URL, busca o link destino e redireciona o browser.
O script é basicamente esse aqui:
#! /usr/bin/python3 import cgi import requests def renderPage(): print("Content-type: text/html;utf-8\n") print(""" <label for="link">Enter the url: <input id="link" name="link" type="text" /> <input type="submit" value="submit" /> """) form = cgi.FieldStorage() url = form.getvalue("link") if url is None: renderPage() else: req = requests.get(url) print(f"Location: {req.url}\n\n")
O pessoal de javascript deve morrer de desgosto de ver uma interface tão simplificada e que usa o servidor pra gerar a respostas. Mas é o que sei fazer. No fim eu simplesmente salvo o link no bookmarks e abro o mesmo cada vez que preciso usar. Então é copiar o link da barra de url, abrir o bookmarks, clicar no link salvo do CGI, ir na caixa de diálogo, colar a url e pressionar o botão "submit".
Daí é só colar o link e deixar a mágica acontecer.
O link pra quem quiser usar o serviço é esse aqui:
Eu já tinha descrito como usar aceleração de hardware pra juntar imagens jpeg e criar um vídeo em usando a GPU para renderizar vídeo. Mas o texto todo abordou apenas os testes que fiz no laptop que tinha na época, com GPU integrada Intel.
E como fazer o mesmo com NVIDIA?
Aqui está a receita de bolo direta:
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -r 1 -i G%04d.JPG -c:v h264_nvenc -b:v 5M -pix_fmt cuda output.mp4
Simples assim ele gera uma grande image output.mp4, que depois eu uso no kdenlive.
Claro que não é assim tão simples. É preciso ter os arquivos da GoPro gerados no padrão G0000.JPG, G0001.JPG, etc.
O que faço então é copiar todos os arquivos que vou precisar dentro do mesmo diretório (uso Gwenview pra isso). E depois eu rodo o seguinte script:
#! /usr/bin/env bash counter=0 for img in G*.JPG do serial=$(printf "%04d" $counter) new_name="G${serial}.JPG" echo "$img => $new_name" mv $img $new_name counter=$((counter++)) done ffmpeg -hwaccel cuda -hwaccel_output_format cuda -r 1 -i G%04d.JPG -c:v h264_nvenc -b:v 5M -pix_fmt cuda output.mp4
E pronto. Imagem gerada em output.mp4 pra ser usada no kdenlive.
Como eu não consegui fazer o kdenlive funcionar bem com a placa NVIDIA, é mais rápido fazer essa primeira geração assim via ffmpeg mesmo.
O script está disponível no GitHub:
https://github.com/helioloureiro/homemadescripts/blob/master/render-video-from-gopro-photos.sh
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.
Por algum motivo bizarro meu mouse passou a não funcionar quando ligo meu PC. A propósito, para fazer minha parte quanto à crise energética na europa, eu passei a deixar meu PC desligado. Só o ligo quando vou usar, e depois desligo novamente. Algo que não fazia há algumas décadas.
Mas voltando ao assunto mouse, por algum motivo bizarro o mouse parou de funcionar. Ao desconectar e reconectar na USB, ele passava a funcionar.
Então resolvi fazer isso por software, num script que botei no /etc/rc.local
, uma vez que rodo o rc-local
no systemd
.
MOUSE_PRODUCT="G203 Prodigy Gaming Mouse" cd /sys/bus/usb/devices || \ die "It seems /sys interface isn't available." echo "Detecting mouse:" mouse_id="" for d in * do if [ ! -f "$d/product" ]; then continue fi echo -n " * $d: " product=$(cat $d/product) if [ "$product" = "$MOUSE_PRODUCT" ]; then echo "$product (DEVICE FOUND)" mouse_id="$d" else echo $product fi done if [ -z "$mouse_id" ]; then die "device not foud" fi echo "Restarting $mouse_id ($MOUSE_PRODUCT)" echo " * unbinding" echo "$mouse_id" > /sys/bus/usb/drivers/usb/unbind sleep 3 echo " * binding" echo "$mouse_id" > /sys/bus/usb/drivers/usb/bind
Esse foi o código inicial que usei, mas descobri logo que dar um reset no mouse não era o suficiente. O mais efetivo era dar um reset no hub USB em que está conectado. Assim alterei pra usar "USB2.0 Hub".
O resultado:
helio@goosfraba ~> sudo homemadescripts/restart_mouse.sh Detecting mouse: * 1-4: CSR8510 A10 * 2-5: Lexmark MC3224dwe * 5-1: PLAYSTATION(R)3Conteroller * 8-1: USB2.0 Hub * 8-1.1: HyperX Quadcast * 8-1.2: HD Pro Webcam C920 * 8-1.3: G432 Gaming Headset * 8-1.4: USB2.0 Hub * 8-1.4.1: Keychron C1 * 8-1.4.4: G203 Prodigy Gaming Mouse (DEVICE FOUND) * 9-1: USB3.0 Hub * 9-1.4: USB3.0 Hub * usb1: OHCI PCI host controller * usb2: EHCI Host Controller * usb3: EHCI Host Controller * usb4: EHCI Host Controller * usb5: OHCI PCI host controller * usb6: OHCI PCI host controller * usb7: OHCI PCI host controller * usb8: xHCI Host Controller * usb9: xHCI Host Controller Restarting 8-1.4 (USB2.0 Hub) * unbinding * binding
e temos um mouse funcionando :)
O código está no github: https://github.com/helioloureiro/homemadescripts/blob/master/restart_mouse.sh
Participei de um bate papo legal com Fernando Ike e Bruno Rocha, amigos de muitos FISLs, sob a direção de Carlos Nogueira. O assunto foi automação e devops, com um pouco de contos de "causos", como sempre :)
Pelo número de acessos ao artigo Fim da LinuxMall? mostra que ela deixou muitas saudades.
O Rodrigo Caetano iniciou uma série de vídeos, que ainda está no primeiro, contando a história da LinuxMall.
Não explica ainda o motivo do fim, mas imagino que isso deva vir com o tempo.
A série é chamada "o desbravador do e-commerce" e conta bastante do início não somente da LinuxMall mas de todo e-commerce no Brasil.
No último fim de semana aconteceu o FOSDEM, a conferência anual sobre software livre da europa. Não a única, mas uma das mais antigas e importantes. E um ponto de encontro pro brazucas, já convertidos ou não pra cidadãos do velho continente.
O ponto de partida é na sexta-feira onde a festa é no Delirium Café, já velho conhecido dos participantes. E tudo regado à cerveja belga que custa 1/3 do preço na Suécia.
Eu particularmente não tenho nenhuma palestra pra recomendar assistir. Todas estão disponíveis no site https://fosdem.org. As que eu vi, achei bem... não algo que valha compartilhar. Não por serem ruins, mas porque talvez eu mesmo não tivesse o nível técnico pra entender o que descreviam ali. E pode acreditar que teve muita coisa que não entendi patavinas do que falavam. Mas eu fiquei transitando ali pelos lados de containers, kernel e palestras no anfiteatro maior do evento, Jansen. Então perdi muita coisa, porque é uma maratona insana de palestras ao mesmo tempo e às vezes as salas não eram próximas pra uma troca rápida. De acordo com meu fitib, passei de 25k passos no sábado.
Mas dentro do evento o que vale mesmo são os encontros com as pessoas. Elas dão dicas de palestras que foram ótimas e você pode assistir depois online.
E o que não dizer da comida nos arredores do evento? Comi praticamente uma perna de brontossauro no almoço.
No primeiro dia as palestras não estavam tão cheia no começo, mas conforme o dia foi passando, as pessoas acordaram da ressaca e foram pro local do evento na Université Libre de Bruxeles. As salas lá são impressionantes de grandes.
E os encontros com velhos amigos também foi uma parte boa. E com ótima comida (que era algo espanhol de acordo com o cardápio).
E claro a menção honrosa à decoração dos mictórios nos banheiros do bar.
Eu aproveitei para dar uma olhadinha no saudoso perl. Muitos livros da versão 6 ainda. Melhor esperar pela versão 7.
Logo que passei a usar o archlinux, que descrevi em A era do Arch Linux, descobri rapidamente que existe um repositório chamado AUR, ArchLinux User Repository.
O AUR é basicamente um respositório de repositórios com código fonte pra criar pacotes pro archlinux criado pros usuários. Não é preciso criar muito vínculo com o projeto e basta puxar seu pacote lá.
Em um desses dias, durante um upgrade com pacman, apareceu pra mim que um pacote python estava desatualizado, marcado como órfão. Então decidi arregaçar as mangas pra enviar um patch de atualização pro pacote.
Li a documentação de como gerar os pacotes no archlinux, que é muito, mas muito, muito fácil. O sistema é fácil pra descomplicar a vida. É praticamente um Makefile que você configura e bota pra rodar. E tudo é controlado com git.
Então meio que adotei o pacote e o tenho mantido atualizado desde então: https://aur.archlinux.org/packages/python-pytelegrambotapi
A desburocracia é imensa. Foi só clonar o repositório, alterar, testar e mandar um push com o update.
O lado ruim da coisa é que qualquer coisa pode ser enviada pra um desses repositórios. Não há verificação. Na verdade parte da ideia do AUR é essa mesmo: pouca burocracia, mas você é responsável pelo que usa. Então é por sua conta e risco pegar pacotes de lá e assume-se que deu uma boa olhada no PKGBUILD, que é a instrução de como o pacote é gerado. Pra esse pacote do pytelegrambotapi por exemplo o arquivo é esse aqui: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=python-pytelegrambotapi
Só de olhar esse arquivo dá pra perceber o porquê adotei o pacote AUR: é muito fácil manter. Muito.
Mais um ponto positivo pro archlinux.
E você? Ainda não migrou pra ele?
Hoje estava olhando pro gráficos anuais de performance da VM quando vi a imagem acima. Parece ataque. Tem cara de ataque mas... não achei nada que tivesse relacionado.
Tem algo na parte de firewall:
Mas é só isso.
Não tem tráfego no Apache:
O pico no final do ano fui em fazendo upgrade. Mas só. Os outros gráficos de CPU, load average, etc não mostram nada.
Não sei se isso me deixa feliz ou triste. Por um lado estou feliz de estar de pé sem precisar mexer em nada por outro lado... o que será que foi atacado?
No momento sigo chorrindo.
Nota: as configurações que seguram o site e tudo mais em pé são as descritas em O dia em que sofri um ataque de DDoS.
Page 4 of 33