Pra quem me segue no Mastodon, sabe que (ou pelo menos vê) que envio um #TootThursday toda quinta-feira. Primeiro o que é isso? Nos tempos de Twitter surgiu o #FollowingFriday, ou #FF pros mais íntimos, que servia pra você indicar perfis interessantes pros outros seguirem. Nessa mesma época eu implementei um script pra fazer isso por mim já que todos que sigo eu considero interessantes.
Pra manter o mesmo espírito no Mastodon, passei a usar o #TootThursday. Como o limite de caracteres é bem mais alto no Mastodon, não é preciso criar um #TT e é possível usar o nome inteiro. E assim sigo postando toda quinta-feira.
Eu andei reparando que meu envio de sugestões estava sempre em 4 ou 5 pessoas. Sempre. E meu programa pra fazer o envio usa 10% da lista de pessoas que sigo, algo que está em mais de 500 hoje em dia no perfil @helioloureiroBR.
Olhei manualmente o uso de account_following( ) e eu estava recebendo somente 40 entradas, mesmo com limite em nulo.
In [14]: u = tt.mastodon.account_following(id=tt.me.id, limit=None) In [15]: len(u) Out[15]: 40
Abri um bug report no GitHub, mas lá mesmo vi a sugestão pra usar account_following( ) com fetch_remaining( ), o que testei aqui.
In [16]: u = tt.mastodon.account_following(id=tt.me.id, limit=80) In [17]: len(u) Out[17]: 80 In [18]: u = tt.mastodon.account_following(id=tt.me.id, limit=500) In [19]: len(u) Out[19]: 80 In [20]: u2 = tt.mastodon.fetch_remaining(u) In [21]: len(u2) Out[21]: 525
E realmente deu certo.
Agora o script está corrigido pra pegar mais pessoas que sigo e selecionar os 10%.
Se quiser olhar o bug report no GitHub, esse é o link: https://github.com/halcy/Mastodon.py/issues/376
No Mastodon mesmo o Mauricio Castro (@
Mas vamos ver se o meu bug report ajuda a melhorar a documentação sobre isso.
UPDATE: escrevi o artigo e esqueci de apontar pro script, caso alguém queira usar ou copiar alguma parte. Ele está aqui: https://github.com/helioloureiro/homemadescripts/blob/master/mastodon-toot-thursday.py
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:
Acabei de lançar um sistema fácil pra fazer loteria de participantes na PyCon Suécia.
Ia fazer web, mas depois mudei de idéia e passei pra console com dialog.
./simple-lottery-eventbrite.py --csvfile=/Users/ehellou/Downloads/PyconSweden2022-Attendee_Summary_Report_91481040875_20221027_1516.csv --dialog
Ele abrirá e perguntará quantos rounds quer rodar (ou quantos vencedores ganharão).
Em seguida ele permite confirmar o ganhador o cancelar, no caso da pessoa não estar na sala.
E por fim salva um log dos ganhadores, com o email correto.
O repositório está no github.
Existem vários sites na Internet que fornecem a informação de qual IP você está usando. Eu uso bastante pra verificar se minha conexão via TOR está funcionando corretamente.
Infelizmente os sites que fornecem essa informação passaram a pedir alguma forma de autenticação ou aprovação de cookies, o que é muito chato uma vez que só quero a informação do IP.
Então pra resolver o problema eu fiz eu mesmo um CGI pra dizer qual IP acessou o site. É simples, mas funcional. Divirtam-se!
Terminada minha maratona pessoal de participações em conferências e eventos em geral, eu decidi dedicar algum tempo pra atualizar meus sistemas.
Meu desktop passou de Ubuntu 20.04 pra 21.10. Decidi simplesmente largar o LTS e abraçar os releases intermediários. Tive alguns problemas com o snapd, que deu uns crashes de kernel, mas no fim tudo deu certo. Uma boa experiência de ambiente desktop com KDE Plasma mais recente.
No servidor eu atualizei pro último Debian estável. Eu sempre espero um pouco pra fazer isso, até sair a correção .1 do release, e foi o que fiz no final. Mas um dos problemas que tive foram meus scripts em python. Muitos deles foram feitos há mais de 10 anos e estavam rodando felizes com python 2.7. O upgrade pra Debian bullseye acabou com essa alegria. Apenas python3 restou e muita coisa parou de funcionar. Posso dizer que até agora não encontrei tudo que quebrou após o upgrade, mas devagar estou corrigindo.
Então aproveitando o embalo eu decidi também fazer o upgrade do raspberrypi. Mesmo sendo raspbian, é Debian. E passei pro bullseye. Assim como o servidor, o upgrade em si foi bem tranquilo. Super suave.
Então percebi que meu as fotos pararam de funcionar.
tl;dr: basicamente o antigo suporte ao picamera deixou de existir. Foi trocado pela libcamera, que não tem suporte em python ainda.
https://github.com/waveform80/picamera/issues/697
O que é possível fazer agora? Aliás o que eu fiz pra contornar isso? Bom... não ficou bonito, mas funciona. Chamei um dos programas que vem com o libcamera e salva fotos em jpeg usando subprocess.
class LibCameraInterface:
def __init__(self, sleep_time=30): None
def get_image(self, destination):
debug("LibCameraInterface.get_image()")
import subprocess
width, height = IMGSIZE
command = f"/usr/bin/libcamera-jpeg --width={width} --height={height} -o {destination}"
subprocess.call(command.split())
Eu aproveitei e dei uma boa refatorada no código. Ficou mais simples e pronto pra trocar. Criei duas classes, LibCameraInterface e CameraInterface. A ideia é voltar ao CameraInterface uma vez que tenha algum tipo de suporte em python. Por enquanto nem pygame funciona mais.
O resultado é quase o mesmo. Quase. Pelo libcamera as imagens ficaram mais escura durante a noite.
O antes:
O depois:
Ambas bem escuras. A segunda eu mudei um pouco a posição da câmera, mas mesmo pegando a iluminação dos prédios fica bem escura. E não achei ainda um jeito de melhorar isso.
Talvez um upgrade pra próxima versão.
UPDATE:
Eu tinha esquecido de postar o link do programa no github. Aqui está ele.
https://github.com/helioloureiro/snapshot-twitter/blob/master/weather-twitter.py
Update 2022-12-09: fui revisitar o artigo e percebi que não tinha colocado o link pro bug no github. Então adicionei.