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.
E como foi o tráfego por aqui em 2022?
Sem muitas surpresas eu diria. Um tráfego baixo e mais ou menos constante com o passar do tempo.
Qual sistema operacional?
Windows continua sendo a maioria isolada. Mas os demais somados já são mais da metade. Então existe alguma esperança pra humanidade. Ainda que pouca.
E navegadores? Acho que essa vai sem grandes surpresas.
Chrome com larga marge à frente. Firefox e safari empatados. Edge mostrando que por enquanto continua longe de ser usado de verdade.
E vamos pro mobile.
Mesmo Android sendo uns 85% do mercado mobile, teve bastante gente em iOS acessando o site. Interessante.
E sem surpresas pra origem dos acessos. Brazil é líder isolado. Seria estranho não ser uma vez que só escreve em português por aqui.
Das páginas mais lidas, a surpresa foram Fim da LinuxMall? e Brasil: a terra em que malandro é malandro, mané é mané. Provavelmente essa última foi por conta da mesma empresa estar novamente aplicando golpes.
E quem fez referências ao site?
A maioria foi de busca direto pelo Google. Alguns via twiiter (o t.co) e alguns poucos de facebook e duckduckgo. Menção honrosa ao Bing.
E o que buscaram por aqui?
Alguns devem ter sido pela divulgação de links que fiz no Twitter, que agora abandonei pelo Mastodon.
As redes sociais que apontaram pra mim tiveram Twitter como grande campeão, mas era onde eu fazia mais anúncios dos posts. Esse lugar deve ser tomado pelo Mastodon em 2023 uma vez que Twitter virou abandonware pra mim.
Isso irá impactar no acesso ao site? Acho que não. Muita gente vem por busca orgânica.
E mesmo com mudança de template, upgrade de joomla, eu consegui dessa vez não perder tráfego. Isso foi bom.
E que comece 2023!
Hoje, tentando baixar um substituto pro Disqus no Linux-BR, descobri que meus e-mails pra @hl.eng.br não estavam mais funcionando.
Então fui fuçar nos logs do postfix pra ver a razão.
Jan 3 13:22:02 truta postfix/smtp[1984]: B300F11F304: to=, orig_to=<***** AT hl.eng.br>, relay=aspmx.l.google.com[2607:f8b0:4001:c58::1b]:25, delay=13, delays=12/0.01/0.64/0.57, dsn=5.7.1, status=bounced (host aspmx.l.google.com[2607:f8b0:4001:c58::1b] said: 550-5.7.1 [2605:2700:0:17:a800:ff:fe3e:bc97] Our system has detected that this 550-5.7.1 message does not meet IPv6 sending guidelines regarding PTR records 550-5.7.1 and authentication. Please review 550-5.7.1 https://support.google.com/mail/?p=IPv6AuthError for more information 550 5.7.1 . z23-20020a056638001700b00358317a21c3si22106554jao.145 - gsmtp (in reply to end of DATA command))
tl;dr: Google passou a exigir configuração de SPF desde novembro de 2022. Então já desde essa época que nada funciona.
O motivo, claro, é que recebo tudo no servidor onde está o blog e envio pra minha conta loureiro.eng.br que fica no Google.
Nada como começar o ano olhando alguns logs.
E fui fazer o upgrade do linux-br.org pra joomla4 e... deu ruim.
Ainda estou tentando descobrir como corrigir antes de apelar pra reverter o backup.
Renovando meus votos pra 2023.
E finalmente tomei coragem pra passar o dia fazendo o upgrade do site pro Joomla 4. As coisas ainda não estão 100% redondas, mas estou corrigindo aos poucos.
O importante é que sai do joomla3, que está em pra parar de receber updates já no ano que vem.
Agora é caçar ou um tema escuro pra site ou modificar esse aqui mesmo pra ficar marotamente escuro. Dark mode rules!
Update: missão cumprida! Site atualizado com a extensão DarkMagic: https://github.com/nikosdion/DarkMagic/releases/tag/2.1.0
Tive de trabalhar nessa semana com um caso que me exigiu usar o pycurl no Python. O problema foi que escrevi um script que rodava baixando artefatos de build no Jenkins usando o módulo requests, e o mesmo não funcionava mais no Gitlab.
Depois de gastar um pouco de tempo no request
, e usando o curl
do exemplo do site do Gitlab, eu acabei desistindo e indo pra usar o pycurl
no script. De cara descobri que não tinha pycurl
instalado. E no MacOS não foi tão simples como poderia ter sido. A receita de bolo pra instalar o pycurl foi a seguinte sequência:
helio@MacOS> arch -arm64 brew install openssl curl helio@MacOS> export PATH=/opt/homebrew/opt/curl/bin:$PATH helio@MacOS> export LDFLAGS="-L/opt/homebrew/opt/curl/lib":$LDFLAGS helio@MacOS> export CPPFLAGS="-I/opt/homebrew/opt/curl/include":$CPPFLAGS helio@MacOS> arch -arm64 pip install --no-cache-dir --compile --ignore-installed --install-option="--with-openssl" --install-option="--openssl-dir=/opt/homebrew/Cellar/openssl@3/3.0.7" pycurl
Quando algo funciona em curl
é fácil escrever o código em python. Basta rodar com o parâmetro --libcurl foo.c
que ele joga o código em funcionou dentro do arquivo.c no formato pra linguagem C, mas é bem próximo do uso em python.
hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "https://gitlab.[redacted]/api/v4/projects/[redacted]/jobs/[redacted]/artifacts"); curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.86.0"); curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_2TLS); curl_easy_setopt(hnd, CURLOPT_FTP_SKIP_PASV_IP, 1L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
Em python:
url = "https://gitlab.[redacted]/api/v4/projects/[redacted]/jobs/[redacted]/artifacts" buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, url) c.setopt(c.BUFFERSIZE, 102400) c.setopt(c.NOPROGRESS, 1) if GITLAB_PRIVATE_TOKEN: c.setopt(c.HTTPHEADER, [ "PRIVATE-TOKEN:" + GITLAB_PRIVATE_TOKEN ]) else: c.setopt(c.HTTPHEADER, [ USERNAME + ":" + PASSWORD]) c.setopt(c.USERAGENT, "curl/7.84.0") c.setopt(c.FOLLOWLOCATION, 1) c.setopt(c.HTTP_VERSION, c.CURL_HTTP_VERSION_2TLS) c.setopt(c.TCP_KEEPALIVE, 1) c.setopt(c.WRITEDATA, buffer) c.perform() c.close()
E assim o código saiu funcionando.
Page 3 of 32