Coisas que eu não vou conseguir entender tão cedo, parte 935612198

Por que StreamReader e StreamWriter não se dão bem com métodos de extensão…?

Fiquei uma semana empacado nessa bagaça. Acabou que uma ideia quase tão boa quanto – de criar um par de callbacks pra cuidar de serializar e desserializar as mensagens de uma Pipe – funciona direitinho e posso usar a lasanha de tipos que eu bolei.

Esse post estava n’O Bifão, uma tentativa (como todas as outras, falha) de manter uma espécie de blog nesses tempos tão difíceis em que tudo se resolve em volta de rede social.

Um ano de um trampo bem diferente, ainda que cheio de paralelos – que ajudaram na colocação pra começo de conversa – me fizeram ir pra vários lugares diferentes, tecnicamente.

Eu tinha pensado por um tempo já em fazer um balanço do que sem querer ou por querer aprendi no ano. Fui testado pelas circunstâncias e pelos requisitos, e deu pra construir um pequeno playground cutucando coisas aqui e ali.


1. AvaloniaUI

Já tinha um bom tempo que eu ficava de olho numa alternativa a fazer alguma coisa para desktop, com C#, que não fosse o WPF. Ou WinForms.

Ou WinUI. Ou UWP.

Ou Xamarin. Ou MAUI.

Francamente, a confusão que eu fiquei quando criei um projeto de brincadeira com MAUI não tá no gibi. E eu já me esqueci de tudo que eu já tinha decorado que era bom de fazer em um projeto novo com WPF. E, de toda forma, ser independente de plataforma é essencial pra mim.

Então veio a oportunidade de mexer com um produto em que eu pude escolher as coisas desde a incepção, e na criação da prova de conceito decidi prender a respiração e usar o AvaloniaUI, o qual já tinha ouvido falar anos atrás. O tempo para colocar as coisas em um nível testado era curto, então o ideal era não errar nessa escolha.

Confesso que minhas melhores expectativas foram superadas. É como o WPF devia ser desde o começo. Não que eu não tenha encontrado alguns pontos onde empaquei, ou onde eu não veja sentido nas escolhas (é um suplício trocar a cor da marca do CheckBox corretamente), mas a maior parte do tempo usando o AvaloniaUI é genuinamente divertido.

MessengerPlusSoundBankExtractor, um dos prováveis programas mais de nicho de todos os tempos, é um extrator de áudios de pacotes de backup do já extinto por mais de 10 anos Messenger Plus – e usa AvaloniaUI.


2. AppImage

Tá aí uma outra coisa que eu tinha curiosidade mas não tinha oportunidade. Desembolar um AppImage que funcionasse, e conseguir enxergar – ainda que parcialmente – a lógica por trás.

É bem satisfatório ter um programa para desktop prontinho pra GNU/Linux (e funcionando), sem mexer uma linha de código do que é gerado pra Windows.

Incidentalmente, isso foi em boa parte contribuição do excelente PupNet-Deploy, que serviu de base para depois sair futucando ingratamente no AppImage que ele criou até ver como as peças se encaixavam. Ler especificações é para quem nasceu sabendo, afinal.

O que ainda é um pouco confuso pra mim é que aparentemente existem múltiplos empacotadores de AppImage por aí. Mas depois eu aprendo o que está acontecendo. Certamente é melhor que Flatpak e Snap…


3. Instaladores

Criar um instalador (especialmente e especificamente para Windows) não é uma tarefa exatamente casual (especialmente e especificamente antes de aprender sobre o PupNet-Deploy, mas isso são outros nhenhenhentos).

Graças ao vídeo-tutorial-bateção-de-cabeça do AngelSix mostrando o passo-a-passo de criar um instalador usando o WiX (versão 3), eu eventualmente consegui criar um instalador usando o WiX (versão 3).

O bendito tutorial. Como eu tive paciência, você pergunta? Eu não tive, é a resposta.

A complexidade é um belo exemplar de Desnecessaurus Rex. Mas funcionou bem, e depois da configuração inicial não precisei mais fazer alterações.

A experiência de conhecer o mundo dos instaladores para Windows
A experiência de conhecer o mundo dos instaladores para Windows

4 – Não Deixe O Paralelismo Passar Fome Por Causa De Uma Linha

Necessidade é o Frank Zappa & As Mães da Invenção, já dizia o velho deitado. Quando você tem que usar uma biblioteca pra escrever um arquivo do Excel, pior ainda.

Passar por potencialmente todos os arquivos de um disco, que pode ser uma unidade de rede ainda por cima, tem um bom custo de I/O. Como muitas propriedades mais particulares deles eram usadas, tem uma quantidade interessante de syscalls sendo feitas.

Claro, um belo Paralell.ForEach() foi usado – com configurações bem-definidas (ainda que agressivas) de processamentos simultâneos, checagens colocadas no lugar certo se aquele loop deveria cessar, tudo do bom e do melhor.

Ele voa de cara!

Ele voa menos quando um disco em rede com mais de 2 milhões de arquivos é usado. Na verdade parava nos 8% depois de 25 horas.

Algo de errado não estava certo. Essas coisas deviam ir pra 100%. A conclusão é que alguma coisa estava causando thread starvation. Mas que tipo de coisa arcana e indomável podia fazer isso? Era o acesso à rede? Era essa busca por propriedades mais aprofundada nos arquivos?

Deixei um profiler rolando por uns minutos escaneando meu disco local todo. O problema tá lá também. Não era acesso à rede.

O que podia ser? Tudo que a gente fazia era pegar os arquivos, ler essas informações, jogar numa planilha de Excel, adicionar uma regra de validação em uma coluna…

Opa.

O profiler indicou o culpado – ninguém menos que o método de inserir validação na planilha do Excel. De alguma forma ele tende a travar a thread. E se a gente não ser ingenuidade e adicionar a validação de uma só vez selecionando a coluna inteira depois de adicionar todas as linhas?

Mudar uma linha de código de um lugar para o outro, e mudar o parâmetro de uma linha só para um range de colunas. Agora atravessar o disco de rede inteiro leva umas poucas horas, e não desacelera. Faz um tempo bem melhor que a solução anterior do cliente, que era feita em VB6.


5 – Patinho de borracha

Em meio a alucinações e devaneios, se esconde um bom patinho de borracha.

A inegável beleza da Internet contemporânea, em toda sua glória.

Patinhos de borracha substancialmente sujos e desbotados.

A inegável beleza da Internet contemporânea, em toda sua glória.

Assim é um LLM. Não caí de anel assim pelo ChatGPT da vida, mas descrever o problema e olhar com cuidado as respostas já me economizou um bom tempo.

Mas é impressionante como as coisas evoluíram de pouco tempo pra cá.

Eu tenho usado o Phind, que é otimizado para desenvolvimento, e provê algumas buscas usando GPT-4 por dia. Mas mesmo quando o modelo com o GPT-3.5 é usado, os resultados são na média muito bons.

É só garantir que não tem lama no meio. É relativamente comum alucinações em que são usadas APIs que foram removidas, por exemplo – mesmo quando a versão da coisa que você está usando é especificada.

LLM tem que RTFM um pouco mais.

Talvez pela última vez outra vez, o aquático membro do Pink Floyd Roger Waters nadou nas nascentes que deságuam nas enchentes da Avenida Silva Lobo no Curral Del Rei, procurando a tal batida perfeita – que ele teria encontrado, tivesse ele surfado no Anel Rodoviário.

Ou fez um show no Mineirão. Ainda assim, talvez pela última vez. Outra vez.

A turnê This is Not a Drill traz o Roger mais à vontade para escancarar sua política, o que é bem-vindo pra cacilda. Quem me dera ele estivesse assim já na turnê de 2018, que teve já uma intensificação mas ainda pareceu light.

Engraçado, eu achava que eu tinha tudo pra ser um farofeiro quando eu ficasse um velho sórdido e covarde. Agora que eu formei minha pupa de quase-meia-idade para chegar em minha forma final, me sinto muito mais interessado quando as coisas são repaginadas na minha frente. Por bem ou por mal.

Eu até consegui ficar relativamente livre de spoilers da setlist. Então foi supimpa depois do anúncio ao início mandar os fãs de Floyd que não gostam da politicagem do Roger ir pro bar – com toda a gentileza, o show começar com a versão sepulcral, pós-apocalíptica de Comfortably Numb 2022, uma elegia para o mundo. Que telões, viu.

Eu prefiro o cenário em forma de cruz usado nos shows mais intimistas, mas Brasil é país de show de estádio, fazer o quê. Deu pra fazer algo interessante ainda assim – mas pra mim ficou claro que estavam improvisando ainda algumas montagens.

Vamos de Bom, Ruim e Feio? Vamos.


O Bom

Uma das melhores coisas que aconteceram na carreira do Roger foi o envelhecimento dele. Ele passou de estagiário do Coringa pra irmão do Richard Gere, e de uma ovelha asmática para um senhor que viu algumas coisas e não voltou de lá.

Wish You Were Here foi cantada uma oitava abaixo, e encaixa muito melhor pra ele, num take mais intimista, enquanto conta uma história com o Syd. …E enquanto cuidadosamente evita o Gilmar.

Have a Cigar cai dois tons também, se rendendo à supremacia do Dó Menor.

Pegou uma coisa do Radio KAOS aqui, uma do Final Cut acolá, e uma do Amused To Death. The Bar como material novo, com reprise recontextualizada. Me likey.

A mensagem política nunca esteve tão escancarada no primeiro plano (não que The Wall por exemplo não estivesse, mas é mais apegada à narrativa), e que alívio deve ser ficar menos e menos inibido. Ele tem alvos mais definidos que no Us+Them.


O Ruim

O palco. A versão para megashow de estádio brasileiro está bem aquém tanto do palco em cruz das etapas mais abençoadas da turnê, quanto até mesmo do palco do Us+Them de 2018, que claramente teve mais cuidado e foi pensado para a ocasião.

As imagens em si até funcionaram, mas o impacto poderia ser melhor. Muita coisa pareceu improvisada e de última hora, e eu não ficaria surpreso se realmente fossem. Uma pena para um array de telões tão estupidamente bem definidos.

Nessa nota, não terem negociado pra trazer o palco (e nessa quebrar um pouco a ideia da pista premium) foi um ponto bem baixo. Poxa, Rogério.


O Feio

Pra variar… as pessoas, né. Fumantes reclamando de gente que invade pontos-chave de área de arquibancada pra ficar em pé. Os dois grupos poderiam fazer o favor de não serem ruins para as outras pessoas, mas é difícil demais.

O tropeiro do Mineirão dá até vontade de comer já que só se entra nesse lugar de 5 em 5 anos, mas nossa como é indigesto.

E eu estou esperando a mesma coragem de não tocar Time para não tocar Another Brick in the Wall pt.2! Toca a parte 1, PULA A PARTE 2, toca a parte 3, Rogério! Coragem!

Eu não sei fazer.

A sociedade ocidental como um todo tem um problema com isso, não me entenda mal. Mas eu lido substancialmente mal.

Receber uma notícia de doença sem tratamento para uma criatura que é um irmão de criação por metade da minha vida, não é surpresa dada a velhice. Mas é um lembrete que de uma forma ou de outra, em um relativo breve indefinido a existência vai tirar ele do meu lado.

E no fim das contas, eu não tenho o que dizer.

Minha nossa, como o WordPress tá ruim pra quem quer… Ter um blog? Que editor horroroso? Socorro?

Aí eu fui olhar o Ghost, que eu cheguei a usar uns anos atrás. E tá tão ruim quanto. Na época, a estratégia deles era ser o WordPress, só que na época boa em que ele era para blogs. Agora ele é o WordPress, só que… em Node?

Não tá muito longe a vontade de só botar um gerador estático aqui e que seja. É o que eu devia ter feito, se eu não tivesse ficado ridiculamente satisfeito com a configuração atual do meu servidor.

Depois de tentar simplificar em excesso com Portainer e Nginx Proxy Manager, a verdadeira iluminação chegou (com a ajuda dos bugs bizarros do Proxy Manager) e o negócio é fazer uma configuração na mão mesmo e rodar os containers na mão também. Tá, no caso do servidor em casa rola de usar essas coisas e tal que são uma mão na roda, mas um rolê mais exposto aos quatro ventos do oceano dourado das internês exige uma ligeira robustez.

Mas deixando as coisas em pastas adequadamente nomeadas, dessa vez. Não é que funciona? IT JUST TWERKS?


O que eu não consigo é lidar com esse editor do WordPress usando 40% da área útil da tela. É por coisas assim que eu acho que sempre vou preferir fazer alguma interface para desktop ao invés de web.

O desespero é tamanho que eu volto a ser esdruxulamente técnico quando esse devia ser o, sei lá, décimo quinto post inicial que faço. O Cafofo tem um pouco mais de 21 anos agora. Ele é substancialmente mais velho do que eu era quando ele já tinha morrido algumas vezes.

Eu gostei de escrever no Substack por… três posts? Mas o meu rolê é ter um blog mais convencional mesmo. Algo que certamente não tem sido o foco de mais ninguém nessa joça. Tá, tem o Mataroa, mas você entendeu.

E no fim das contas, é problema seu se você quer voltar aqui e ler alguma coisa nova – mala direta você compra no shopping ou algo assim.

Ou sei lá, se eu descobrir que tem RSS ainda por aqui, pode também. Tá na hora de procurar um bom cliente RSS para os anos 20. Porque nós estamos nos anos 20. Já parou pra pensar? O Casal 20 é nosso contemporâneo.

Light