domingo, 16 de agosto de 2026

Leitura: O Império da IA

Após assistir a várias entrevistas com Karen Hao, resolvi comprar seu livro.

A omnipresença da IA em foros de TI e a pressão de forças de fora da TI para que soluções sejam adotadas antes mesmo que problemas sejam identificados somaram-se aos aumentos absurdos dos preços de componentes (memórias, GPUs, SSDs) e acabaram por alimentar uma tremenda má vontade em mim.

A IA certamente será uma tecnologia útil em alguns ramos e em alguma medida, embora não creia que seja a panaceia que está sendo vendida; com certeza será mais útil que as criptomoedas.

Dada a crise climática, o modelo de negócio que está sendo vendido certamente não é o melhor. Ultimamente, tenho a impressão que qualquer coisa está sendo usada para evitar ter que atacar os problemas do planeta. O formato atual do capitalismo (ou economia de mercado, se preferir) não é capaz de evitar o apocalipse ecológico que estamos preparando há décadas.

Este é o tema principal do livro: os maiores proponentes da IA agem como imperialistas, enquanto vendem ora a solução para todos os problemas, ora um futuro distópico. O comportamento errático mal disfaça o fato de que ainda não encontraram um modelo de negócios que resolva a grande dívida que estão acumulando.

O livro é longo: mais de 400 páginas. Boa parte dele relata os atritos internos e as intrigas entre os maiores personagens da IA. Além disso, há relatos interessantes sobre os problemas gerados pelas maiores empresas: consumo de recursos naturais, poluição, e abusos de trabalhadores em países periféricos.

As últimas páginas relatam o caso de uma organização neozelandesa que usou a IA para documentar e criar materiais de ensino da língua dos Maoris. Essa organização responsavelmente e respeitosamente: escutou a comunidade; trabalhou em conjunto com a comunidade; e usou recursos com economia (apenas duas GPUs). Mesmo assim, os resultados foram muito bons.

A filósofa Carissa Véliz argumenta que a maneira como as tecnologias são criadas importa, porque a intenção acaba ditando os resultados. Essas empresas vendem a noção de que a IA curará doenças e solucionará a solidão, mas, ao mesmo tempo, agem para controlar recursos e aproveitam-se de trabalhadores vulneráveis, assim como os impérios doutrora.

As grandes empresas de tecnologia vendem as soluções de nuvem como se fossem benéficas aos usuários. Em alguma medida, elas realmente o são, mas a intenção verdadeira é estabelecer um feudo e dele extrair uma renda vitalícia. Aos poucos, isso vai se revelando: versões novas que só funcionam na nuvem, custos altos de tráfego de dados, licenças que subitamente mudam os termos, etc.

Em meu trabalho diário, vejo a IA sendo vendida como a solução para domar a complexidade burocrática, quando seria muito mais inteligente racionalizar a burocracia. Documentos são gerados no Word, impressos, assinados, escaneados como imagens, e então processados por IA. Documentos são gerados por IA e depois resumidos por IA. E isso me leva a pensar: se um documento é gerado por uma IA apenas para ser interpretado por outra IA, ele realmente precisa existir?

Eu achei o livro um pouco longo demais, mas ainda assim achei que foi uma leitura interessante (embora os comportamentos de alguns bilionários sejam bastante revoltantes). Felizmente, o livro encerra com histórias positivas de projetos mais humanos; são essas histórias que eu gostaria de ver nos meios de comunicação. Assim como as grandes empresas querem ditar o futuro via a IA, a mídia, em geral, apenas repassa os sonhos de dominação global de uns poucos bilionários. Temos que prestar atenção ao homem que está atrás da cortina.

quinta-feira, 13 de agosto de 2026

Combinações de Quartas de Final

O recente sorteio das quartas de final da Copa do Brasil levantou suspeitas por juntar os clubes por proximidade.

Há 105 possíveis quartas de final (8!/(2!*2!*2!*2!*4!)), mas é mais divertido calcular na linha de comando com grep.

Primeiro, uso o código de combinações para calcular todos os enfrentamentos possíveis (são 28):



my @jogos=qw(AB AC BC AD BD CD AE BE CE DE AF BF CF DF EF AG 
             BG CG DG EG FG AH BH CH DH EH FH GH AB AC BC AD);
             

Depois, uso o mesmo código para encontrar todas as combinações de enfrentamentos, mas uso o grep para eliminar as combinações em que um time aparece mais de uma vez:



perl choose.pl  |  grep -Ev '(\S)(.*\1)'
DE CF BG AH 
CE DF BG AH 
CD EF BG AH 
DE BF CG AH 
BE DF CG AH 
BD EF CG AH 
...

A expressão -E "(\S)(.*\1)" procura por coisas diferentes de espaço que sejam repetidas ao menos uma vez e -v as elimina do resultado.

O resultado são 105 combinações de quartas de final e a combinação específica aparece apenas uma vez (claro):


perl choose.pl  |  grep -Ev '(\S)(.*\1)'  | grep "AB CD EF GH"
AB CD EF GH 

Dada a quantidade absurda de jogos a que os jogadores são submetidos no Brasil, organizar os campeonatos por proximidade, a fim de minimizar as viagens, seria uma medida interessante.

segunda-feira, 27 de julho de 2026

Grep com Saída Programável

O grep permite usar expressões regulares do Perl e, portanto, comporta expressões bastante complexas.

Por exemplo, se quero filtrar por textos como "sequence=123", posso usar:


$grep -Po "sequence=\d+" data.txt
sequence=123
sequence=321

Se eu quiser só os números, posso usar lookbehind:


$grep -Po "(?<=sequence=)\d+" data.txt
123
321

Fica um pouco complicado, mas ainda é possível ler. Entretanto, se seu quiser uma lista das sequencias, não tenho recurso. Se eu quiser filtrar campos distintos e trocar a ordem deles na saída, tampouco há recurso disponível, exceto fazer pipe para um awk.

O que eu realmente gostaria é de poder fazer algo assim:


$grep -P "sequence=(\d+)" -p "$1,"
123,321
  

Como isso não está disponível, resolvi escrever um pouco de Perl. A solução ficou bastante sucinta e flexível. Inicialmente, eu pretendia chamá-la de pgrep, mas como já há um comando pgrep para procurar processos, acabei por nomeá-la grepp (grep++).


$grepp
Usage: grepp regex [output] [filename]

$grepp 'sequence=(\d+)' '$1\n' log.txt
20
30
40

$cat log.txt | grepp 'sequence=(\d+)' '$1,'
20,30,40,

$cat log.txt | grepp 'sequence=(\d+)' 
sequence=20
sequence=30
sequence=40

$gunzip -c data.log.gz | grepp 'id=(\d+)' '$1,'
150647,160346,150648,160347,160348,150649,

$gunzip -c data.log.gz | grepp 'id=(\d+) val=(\d+)' '$1=$2\n'
150647=7
160346=9
150648=4
160347=5

$grepp 'enabled=(\w+)' '$filename: $1\n' *.ini
abc.ini: true
xyz.ini: false

$grepp 'weight=(\d+) items=(\d+)' '@{[$1*$2]}' data.txt
34
110

$grepp while '$filename($lineno): $_' grepp
grepp(22):   while(<$fh>) {
  

quinta-feira, 25 de junho de 2026

MBA de 1,99

Recentemente, como cliente, aprendi três lições importantes sobre negócios.

Um serviço de SMS começou a bloquear nossas requisições quando atingimos o valor orçado no contrato. Eles não entraram em contato, simplesmente bloquearam todas as requisições a partir de um certo número mensal de mensagens.

Isso nos obrigou a imediatamente otimizar as mensagens: muitas podiam ser agregadas (o que também beneficiou os recipientes). Passamos a enviar cerca de 50% das mensagens que antes enviávamos e o nosso custo caiu na mesma proporção.

A nossa necessidade não excedia em muito a quantidade orçada: em geral, menos de 10%. Ao causar esse problema para nós, o provedor acabou perdendo metade da receita.

Além disso, o contrato não indicava que havia um limite; ele indicava uma expectativa de uso.

Penso que a empresa falhou de três formas e que disso podemos aprender o seguinte:

  • Não seja mesquinho com o cliente;
  • Converse com cliente e procure entender suas necessidades;
  • Leia o contrato com atenção (e discuta o contrato com o cliente).

A pequena crise acabou sendo benéfica para nós e custou 50% do contrato para o provedor.

terça-feira, 16 de junho de 2026

Lacunas de Vocabulário

Não é incomum encontrar uma palavra nova num livro ou mesmo conversando com uma pessoa. Sempre encontro palavras interessantes com Saramago ou com pessoas de Caçapava do Sul, a qual, tenho certeza, merece o seu próprio dicionário, dado que essa cidade tem um vocabulário muito particular.

Tenho também certeza que existem lacunas de vocabulário que quase todo mundo compartilha, como os coletivos, assim como há vocabulários específicos de determinadas profissões, faixas etárias, ou grupos sociais.

Entretanto, há palavras que eu julgava universais e nos últimos tempos descobri, para minha grande surpresa, que uma em particular não o é: dúzia. Em três ocasiões nos últimos meses, deparei-me, sempre num balcão de padaria, com pessoas que não sabem do que se trata e não consigo encontrar uma explicação para este fenômeno recente.

Há ainda coisas que são vendidas às dúzias: ovos e caixas de leite, por exemplo. Portanto, sei que ainda é uma palavra relevante. Uma grosa, por outro lado, eu entendo que pouca gente conheça a medida. Almude tampouco. O conjunto de pessoas que conhece grosa e almude posso delinear como o dos netos de alfaiates portugueses. Dada a escassez, tanto de pessoas, como de motivos para usar ambas as palavras, elas vão ficar acumulando pó na minha cabeça.

A dúzia parecia-me uma parte fundamental da língua, como a palavra sim, a qual, estranhamente, há língua que não possua. Pode-se viver sem o sim? Pode-se. Sem o não, tenho dúvidas. Pode-se também viver sem a dúzia; o doze faz bem o papel, embora pareça-me mais natural comprar uma dúzia de ovos que comprar doze ovos.

Sinto que, se tirássemos o sim, as conversas ficariam mais ricas, ao passo que, se tirássemos dúzia, perderíamos um floreio latino que embeleza nossa língua.

Vou insistir com a palavra, mas doravante com ímpeto didático adicional.

segunda-feira, 18 de maio de 2026

O Conto da Aia Brasileira

Maria nasceu numa casinha pequena, longe da estrada. A casinha não tinha nem luz nem água corrente. O ano era 1954, logo depois da morte de Getúlio, o pai dos pobres, e a localidade era o interior de Caçapava do Sul. Ela não foi a primeira Maria a nascer ali, mas foi a primeira que vingou.

Quando completou dois anos, ou mais ou menos isso, dado que ninguém estava contando, o pai de Maria decidiu levá-la à cidade para registrá-la. Ouviu dizer que era importante. Foi até lá sem refletir sobre o nome. Quando o escrivão indagou, teve que pensar um pouco e, finalmente, concluiu que "coloca Maria aí" era o que precisava ser dito.

Aos 6 anos, os pais de Maria decidiram levá-la à sede da fazenda, na esperança de que lá pudesse viver um pouco melhor e, quem sabe, aprender a ler. A esposa do Capitão não precisou pensar muito: era mirradinha e não sabia fazer quase nada, mas não custava nada e ela poderia adestrar a negrinha que logo ela seria útil. Ela não sabia mesmo fazer muita coisa já que a casinha em que morara até então era desprovida de meios. Sabia varrer, sabia buscar água, sabia fazer arroz, ou assar um lagarto com lenha.

Ela cresceu num quarto cheio de ferramentas que era muito frio no inverno e muito quente no verão. Trabalhava todos os dias e descansava um pouco quando a família ia à cidade. Melhor alimentada, ela foi crescendo e ganhando corpo. Tornou-se uma adolescente vistosa: pernas firmes e uma bunda que os homens não conseguiam ignorar. Pedrinho e Fernando, os filhos do Capitão, certamente não a ignoraram. Ela já era moça e os filhos do Capitão eram os únicos machos que não cheiravam mal e não eram muito mais velhos que ela; os únicos adolescentes que ela conhecia no mundo.

Primeiro foi o Pedrinho. Numa noite quente, ele apareceu no quartinho e a convidou para um banho no açude. Pedrinho era bonito e ela não pensou muito no que estava fazendo; precisava de um pouco de afeto. Semanas mais tarde, foi o Fernando. Talvez o Pedrinho o tenha incentivado.

É impossível calcular se foi sorte ou azar ela não ter emprenhado, porque a vida de Maria era como a natureza: ela simplesmente é. A mulher do Capitão notou que algo acontecia e reparou como os homens esticavam os olhos em direção ao traseiro de Maria.

Um dia um amigo do Capitão veio de Santa Maria trocar um dedo de prosa e assar um churrasco. O amigo, Doutor Antônio, professor da Universidade, era viúvo e ele mesmo já não tinha muita saúde, porque bebia e fumava muito. Antônio gostou muito da negrinha da casa. A mulher do Capitão percebeu uma saída e sugeriu ao amigo levar a moça: se der um jeito no cabelo, fica até bonitinha.

Doutor Antônio propôs um negócio. Maria casaria com ele e viria morar em Santa Maria. Em troca, ela poderia estudar e, quando o Doutor morresse, ela herdaria alguma coisa e poderia seguir sua vida. Talvez ela tivesse que cuidar dele por uns 20 anos e logo estaria livre. A mulher do Capitão, por outro lado, deixou claro que ela não poderia mais ficar na fazenda. A vida decidiu por ela mais uma vez.

Maria estudou um pouco em Santa Maria. Ela tinha dificuldade e quando chegou à quinta série o Doutor achou que bastava para cuidar da casa. Nos anos 1970, uma mulher precisava de autorização do marido para abrir crediário, para ter um emprego, os passaportes eram familiares e o portador era o chefe da família, e uma mulher não podia pernoitar sozinha num hotel. Maria não ficou sabendo de nada disso, porque o Doutor viajava sozinho. Talvez ele tivesse vergonha da esposa.

Essas limitações todas eram só para as mulheres ricas, as quais ela invejava um pouco. As da novela pareciam livres, mas só existiam nos sonhos.

Muito antes de completarem 20 anos de casados, o Doutor ficou seriamente doente e faleceu. Maria cuidou do Doutor nos últimos e terríveis dias; sentiu pena do velho que estava sofrendo como um cão. Os filhos do Doutor vieram lá de São Paulo e organizaram tudo. Sem saber como tomar posse do que lhe tinha sido prometido, ela acabou com um pouco de dinheiro que os filhos ofereceram para não a deixarem completamente desprovida e também para incentivá-la a sair do apartamento o quanto antes.

Ela passou a trabalhar como doméstica, morando em quartinhos, às vezes quentes, às vezes frios, sempre sem ventilação. Pelo menos na fazenda ela pudera dar uma volta pelo campo e tomara banho de açude.

terça-feira, 12 de maio de 2026

Templates de Serviços com o systemd

Aos poucos estou começando a gostar do systemd. Minha última descoberta foram os templates, os quais permitem usar um único arquivo de configuração para gerenciar vários sistemas semelhantes.

Eu administro vários bancos Oracle que possuem integração com outros bancos via um mecanismo muito precário chamado Heterogeneous Services. O FDW do Postgresql é muito melhor, mas não é importante para esta discussão.

Infelizmente, o Oracle desliga os listeners desses serviços sem qualquer motivo aparente. Então, resolvi experimentar criar um serviço do systemd para cada um. Eu não queria ter que criar um arquivo para cada serviço, então descobri os templates.

Criei um arquivo chamado hs-listener@.service. O arroba indica que é um template.


[Unit]
Description=Oracle HS Listener %I
After=network.target

[Service]
Type=forking
User=grid
Group=oinstall
Environment="ORACLE_HOME=/u02/app/23.0.0.0/gridhome_1/"
ExecStart=/u02/app/23.0.0.0/gridhome_1/bin/lsnrctl start listener_%i
ExecStop= /u02/app/23.0.0.0/gridhome_1/bin/lsnrctl stop  listener_%i
Restart=always

[Install]
WantedBy=multi-user.target

Dentro do template, %I e %i serão substituídos pelos parâmetros usados a seguir. O %I não é formatado, mas o %i é.


  systemctl enable hs-listener@db2
  systemctl enable hs-listener@pgsql
  systemctl enable hs-listener@mysql
  systemctl enable hs-listener@sqlserver
    

Como se pode perceber, isso evita ter que criar vários arquivos semelhantes.


  systemctl start hs-listener@db2
  systemctl start hs-listener@pgsql
  systemctl start hs-listener@mysql
  systemctl start hs-listener@sqlserver
  

E isto evita ter que investigar o que houve com o listener uma vez por mês.

sexta-feira, 8 de maio de 2026

Pontuação Mínima para Permanecer na Série A

Há um consenso de que, em geral, 45 pontos bastam para permanecer na Série A. Resolvi verificar matematicamente qual a pontuação mínima e com qual probabilidade ela aparece.

O campeonato tem 20 times que jogam entre si 2 vezes, então há 380 jogos. Para simular todas as possibilidades de resultados, seria preciso contar de 0 até 3381-1.

Não há tempo para isso tudo. Então resolvi simular 10 milhões de campeonatos e tabular os pontos do 16º colocado em cada um.

552
31651
604850
6262349
33866748
104000747
194632146
237819145
202239044
126684743
60903842
23276041
7253840
1906539
424438
78437
13336
2135
234

Em dois casos apenas o 16º tinha somente 34 pontos e em 5 casos, seriam precisos 52 pontos para não ser rebaixado.

52100%
5199,99995%
5099,99679%
4999,93631%
4899,31008%
4795,92341%
4685,52334%
4566,06013%
4442,27822%
4322,05432%
429,38585%
413,29547%
400,96787%
390,24249%
380,05184%
370,0094%
360,00156%
350,00023%
340,00002%

As probabilidades acumuladas mostram que, em 66% dos casos, 45 pontos são suficientes para manter-se na Série A. As chances melhoram substancialmente com 46 e 47 pontos. A partir de 48, a classificação é praticamente garantida.

Várias execuções mostraram que a média do 16º colocado é ~44,74 pontos, o que reforça a sensação de que 45 pontos é uma pontuação relativamente segura.

Nestas simulações, todos os times têm chances iguais; na vida real, alguns times ganham muito e outros perdem muito. Então, uma simulação mais interessante teria que considerar uma variedade de times. Em 2009, o Coritiba foi rebaixado com 45 pontos e este foi o time melhor pontuado a cair. Outros times já foram rebaixados com 44 pontos, mas nunca um time foi para a Série B com 46.

quarta-feira, 6 de maio de 2026

Crescimento dos Barramentos de Endereçamento

O processador 6502 tem um espaço de endereçamento de 64KB. Pode parecer muito, mas são apenas 256 páginas de 256 bytes. Um programador atento vai logo ficar íntimo de todos os bytes. Os bytes F abaixo indicam o número da página e os 0 indicam os bytes dentro da página, como uma máscara de rede.


 &FF00
 

O 8086 possuía um espaço de endereçamento de 20 bits, o que resulta em 1MB ao todo. Isso pode ser visto como 256 blocos de 4KB.


 &FF000
 

O 286 possuía 24 linhas de endereçamento, as quais permitem endereçar 16MB ou 4096 blocos de 4KB.


 &FFF000
 

O 80386 expandiu o endereçamento a 32 bits (4GB), ou 1M (20 bits) blocos de 4KB.


 &FFFFF000
 

Os processadores atuais costumam usar endereços de 48 bits (64K * 4GB), embora usem endereços físicos de 40 bits (1TB). Isso equivale a 4M páginas de 4KB.


 &FFFFFFFFF000
 

Se com 36 bits para indicar a página, a coisa complica deverasmente, com um barramento de 64 bits podemos jogar a toalha. Seriam 1M * 4GB páginas, ou 4T de páginas de 4KB.


 &FFFFFFFFFFFFF000
 

sexta-feira, 17 de abril de 2026

Geração de Senhas no Linux

O Linux tem um dicionário de palavras em /usr/share/dict/words (não sei se todas as distribuições usam o mesmo caminho). Uma bom uso dessa lista de palavras é a geração de senhas.


 grep -Pv "\W" /usr/share/dict/words | shuf -n 3 | xargs | tr ' ' '-'
 earning-artistes-steatoses

O grep permite selecionar as palavras compostas apenas por letras; o shuf escolhe 3 aleatoriamente; o xargs as junta numa linha só; o tr troca os espaços por traços.

Se eu quiser gerar uma senha numérica, posso usar o shuf da seguinte maneira:


 shuf -i 10-99  | shuf -n 3 | xargs | tr -d ' '
 726580
 

Ele vai gerar todos os números entre 10 e 99 (todos com 2 dígitos) e escolher 3. Então, ele elimina os espaços e o resultado é um número com 6 digítos.

Uma forma de gerar uma senha longa é calcular o md5 de um arquivo. Como forma de agregar informação, podemos adicionar os nanossegundos do relógio.


 find . -type f | head -n 1000 | shuf -n 1 | \
   (xargs md5sum; echo $(date +%N)) | \
   xargs  | md5sum
 83be018d2a490823ef949005bd7789e7  -
 

Neste caso, estou procurando por um arquivo qualquer (limitei a 1000, para não vasculhar o disco todo).

Como openssl sempre está disponível, pode-se também usá-lo para gerar senhas:


 openssl rand -base64 12
 IZgLy20O0GjWP2ze
 

Podemos também pegar uns bytes de /dev/urandom (ou /dev/random ou /dev/arandom - leia a documentação sobre cada um) e passá-los por md5sum. No exemplo abaixo, peguei 100 bytes e gerei uma senha de 16:


head -c 100 /dev/urandom | md5sum | head -c 16
0643e4947c026e48

quarta-feira, 1 de abril de 2026

O Maior Som do Mundo

Meu avô paterno instalou caixas de som em todos os cômodos da casa. Assim, ele podia escutar rádio onde estivesse. Eram pequenas caixas de madeira nos quantos dos quartos. Agora, imagine um sistema semelhante que cobria um país inteiro. E esse país era o maior país da terra.

Em 1925, a União Soviética começou a instalar rádios a cabo em todos os prédios da Rússia (República Socialista Federativa Soviética da Rússia - RSFSR). Sendo ainda um país muito pobre, rádios convencionais eram muito caros para serem amplamente adotados. Em 1920, um radio custava US$200 nos Estêites; o preço baixou a US$35 até o fim da década, mas isso representaria quase US$700 em verdinhas de 2026. Então, optou-se por uma solução cabeada: isso simplificaria os receptores até o ponto de serem pouco mais que caixas de som.

Dentro da caixinha há apenas 3 componentes: um transformador, um controle de volume, e um alto-falante. Portanto, o equipamento era muito barato. O sinal era transmitido de Moscou para as regiões em cabos de telefone. Depois, o sinal era convertido em um sinal de 960V (ouch) e transmitido para as cidades. Em cada cidade, uma estação local reduzia a voltagem a 240V. Finalmente, cada prédio baixava o sinal para os 30V que chegavam a cada apartamento. Então, graças a um produto muito barato, todo mundo podia receber notícias, mesmo que fosse um único canal do governo.

Durante a Segunda Guerra, ou a Grande Guerra Patriótica, todos os radios convencionais foram confiscados para impedir que os cidadãos soviéticos recebessem falsas notícias transmitidas pelas forças invasoras. Os rádios cabeados, entretanto, foram mantidos e resultaram ser muito úteis para avisos de emergências, principalmente porque o sistema permitia que uma região específica apenas fosse notificada.

Alto-falante da época de Stalin

Em 1962, o sistema alcançava 48 milhões de pessoas (de 220 milhões). Em 1964, a RSFSR determinou que todos os prédios habitacionais em construção fossem já equipados com o cabeamento necessário. Em seu ápice, nos anos 1980, 90% da população (~250 milhões de ~270 milhões) tinha acesso ao sistema; apenas os habitantes de localidades remotas não eram servidos.

Ainda em 1962, um sistema mais complexo foi adotado a fim de permitir mais canais. Usando Amplitude Modulada (AM), outros dois canais eram oferecidos em 78kHz e 120kHz. Isso exige um receptador mais complexo, mas os receptadores originais continuavam a operar com o sinal padrão. Um quarto canal, de 52kHz, foi planejado e anunciado em 1990, mas a dissolução da URSS levou o projeto ser encerrado abruptamente.

Os plugues eram idênticos aos de eletricidade, mas marcados com a palavra RADIO (РАДИО) para evitar confusões.

Apesar de ser chamado de rádio, as caixinhas eram realmente alto-falantes e, portanto, pode-se dizer que este foi o maior sistema de som do mundo: o único a alcançar 11 fusos horários.

segunda-feira, 23 de março de 2026

Ética na TI

Uma cadeira com potencial desperdiçado na faculdade foi "Computador e Sociedade". Eu não dei muita importância e o professor tampouco.

Naqueles tempos, as questões éticas e morais pareciam muito distantes da informática. Estávamos, assim como continuamos, muito enamorados dos brinquedinhos novos que são lançados todos os anos.

A informática mal começava a invadir os lares e nem todos a usavam diretamente no trabalho. Hoje, andamos todos com computadores no bolsos. E esses computadores têm sensores, tiram fotos, sabem sua posição no mundo.

O reino da computação, entretanto, continua discutindo muito pouco as coisas que produz. Sim, algumas pessoas se preocupam com questões éticas, sociais, e até ecológicas, mas essas preocupações mal chegam ao público em geral.

Trabalhar para multinacionais como a Meta, o Google, a Oracle, e a Microslop Microsoft é o sonho de muitas pessoas. Não é justo culpá-las, porque as oportunidades podem ser muito boas.

Entretanto, como brasileiro, sinto que o país e os governos de todos os níveis não se preocupam de forma alguma com a quantidade de dinheiro que é despendido e muito menos com a dependência tecnológica do Brasil com essas empresas estrangeiras. E não é por serem estrangeiras, é porque elas já deram muitas provas de que não são confiáveis. O estado brasileiro gasta com a educação de futuros funcionários de multinacionais e deixa de fomentar uma indústria nacional de TI.

Além disso, o mundo parece estar numa corrida desenfreada para enriquecer algumas poucas pessoas, enquanto não leva a sério os problemas sociais e ecológicos que estão se acumulando.

Há poucos anos, surgiram as criptomoedas que, ao fim e ao cabo, demonstraram servir de subsídio para o crime e como a plataforma perfeita para golpes financeiros. Mesmo após tantas demonstrações de que as criptomoedas não são tão úteis fora do crime, uma quantidade enorme de dinheiro continua sendo perdido e recursos naturais são desperdiçados com essa promessa de riquezas fáceis.

Como se o mundo não precisasse diminuir e racionalizar o consumo de energia e água, agora temos a IA para a qual estão sendo reservados mais datacenters do que há energia disponível para alimentá-los. Nos EUA, há locais em que a energia elétrica está mais cara para os consumidores porque o consumo dos datacenters cresceu demais. Em alguns locais, a escassa água disponível está sendo desviada para arrefecer computadores.

O capitalismo tardio está sempre nos oferecendo um futuro magnífico, mas agora ele está tornando o presente pior de forma muito clara. Metade da África não tem luz elétrica; a Etiópia precisou vender bônus para a própria população para arrecadar US$5 bi para uma hidrelétrica que vai fornecer energia a 60 milhões de pessoas. A bolha da IA já está na casa do trilhão de dólares.

E essa loucura toda não é discutida em ambientes de tecnologia. Os departamentos de TI estão correndo enlouquecidamente atrás de recursos e treinamentos para apaziguar a ânsia por IA de seus clientes e usuários.

Recentemente, um advogado levantou uma questão fundamental: vamos usar LLMs para transformar 10 linhas de texto em documentos que depois serão novamente resumidos por LLM. Isto é, vamos criar uma solução magnífica para não resolver nenhum problema verdadeiro (assim como as criptomoedas).

E não são essas questões o que mais me angustia, é a absoluta indiferença que observo no meu meio.

quarta-feira, 18 de março de 2026

Alucinação é Propaganda

Os LLMs são, essencialmente, redes neurais. Redes neurais são usadas para aproximar funções e são treinadas com dados. Treiná-las significa ajustar os pesos de cada nodo (neurônio) para que as respostas saiam certas.

Entretanto, raramente os dados de entrada são exaustivos, então as respostas são sempre extrapolações sobre os dados de treinamento.

Um único neurônio com duas entradas e uma saída vai poder prever se o resultado de uma função está deste lado de uma reta ou daquele lado. Se a função for mais complexa que isso, mais neurônios serão necessários: as LLMs atuais têm bilhões deles, então conseguem fazer previsões boas. O que eles fazem é prever, não pensar.

O próprio termo Inteligência Artificial já é um engodo; o termo Alucinação é usado para reforçar a ilusão.

Pay no attention to that man behind the curtain!

As LLMs não alucinam; elas não perdem contato com a realidade. Elas simplesmente fazem aquilo que o algoritmo dita: cospem textos com base nos textos anteriores.

Um nome menos glamoroso para tudo isso seria Previsão Estocástica de Texto. Mas isso não animaria muito o setor de marketing.

quinta-feira, 26 de fevereiro de 2026

Evolução das Revistas

As bancas de revistas do centro agora vendem apenas lanches e bebibas. Então, quando encontrei uma banca a vender revistas, resolvi averiguar o que estava sendo ofertado.

Duas capas da Carta Capital saltaram aos olhos, mas o preço me pareceu alto: R$31,90. E as revistas são bem fininhas.

Resolvi comparar com a edição de fevereiro de 1986 da Acorn User, a revista que me conectava ao mundo naquela época pré-internet.

A edição daquele mês de 40 anos atrás custou £1.20, que a calculadora de inflação do Banco da Inglaterra diz que equivalem a £3.62 hoje. Convertendo para a moeda tupiniquim, deve dar algo como R$26, mas não sei qual era o valor da postagem naquela época. Posso dizer que os valores são parecidos.

Entretanto, a Acorn User tinha 204 páginas, sendo 120,5 páginas de propagandas, inclusive alguns classificados gratuítos para os leitores.

A Carta Capital tem 60 páginas, sendo 4 de propagandas (uma delas é da própria publicação, há um anúncio de duas páginas do governo federal; e o último anúncio é de uma ação social).

O número de páginas úteis, portanto, não era muito diferente. A quantidade de anúncios era grande naquela época, porque não existia Internet. Eles eram importantes para todas as partes, inclusive os leitores.

Por volta do ano 2000 já era difícil encontrar uma publicação técnica nacional. Agora, até mesmo os jornais estão definhando. As plataformas digitais consomem todos os orçamentos publicitários e o classificados foram superados pelos mercados on-line.

Eu consigo facilmente todas as informações que desejo, mas ainda sinto que perdi algo.

quinta-feira, 19 de fevereiro de 2026

Um Produto Improvável

Agora tenho, por motivos inesperados, dois provedores de internet em minha casa. Um a 350Mbps e outro a 700Mbps.

E, num dia como qualquer outro, passei a ter 1Gbps de conexão a uma rede mundial de computadores. O futuro chegou quando já não fazia falta.

Após muito refletir e pesquisar, resolvi juntar as duas com um roteador Mikrotik. Foi uma decisão confusa e complicada e, ao fim, posso mais ou menos afirmar que escolhi essa saída porque queria um brinquedinho novo para experimentar.

Uma alternativa seria comprar um roteador que suportasse OpenWRT, mas eu já tenho um roteador novinho que funciona bem.

O Mikrotik não é um aparelho simples, então tive que tomar a medida drástica de ler a documentação.

Finalmente, configurei a caixinha para repassar 2/3 do tráfego por um provedor e 1/3 pelo outro. Não configurei failover porque quero saber quando um falhar; caso contrário, eu poderia passar anos sem perceber que estava usando apenas um e pagando dois.

Isso me pôs a pensar sobre um produto que pudesse ser vendido a usuários leigos.

Algumas dificuldades vieram à mente:

  • A instalação precisa ser trivial (o usuário só precisa conectar os cabos);
  • O aparelho precisa descobrir sozinho a velocidade de cada provedor;
  • Ele precisa de failover e também precisa comunicar ao usuário quando uma linha cair.

Dado que uma pessoa ter dois provedores já é uma situação anormal (não estou considerando empresas, que geralmente têm sua TI ou a terceirizam), um produto para balancear dois provedores já resolveria boa parte do mercado.

Uma solução seria vender um roteador de prateleira com OpenWRT instalado e configurado para duas WANs.

Entretanto, uma questão adicional persiste: desligar os Wi-Fis dos provedores. Quando contratei o segundo provedor, eu resolvi levantar a questão com o vendedor. Eu suspeitei que não seria compreendido, mas ofereci ao vendedor a oportunidade de me surpreender. Como esperado, ele não entendeu o que eu estava propondo; não há equipamento alternativo e não tem sentido não usar o Wi-Fi. Então, eu levantei a questão com o técnico que executou a instalação e, realmente, o provedor só oferece um tipo de modem, mas eu poderia desabilitar o Wi-Fi. Isso não é trivial para um usuário leigo e teria que fazer parte do pacote.

O histórico de produtos configurados pelos consumidores tem uma longa lista de artefatos apreciados por engenheiros e esquecidos pelos consumidores. Um exemplo magnífico é o telefone soviético com autodiscagem.

Um programador como eu certamente teria grande afeto por um telefone com memória de núcleo magnético programável, mas um consumidor encolher-se-ia em horror frente à confusão de fios e fugiria com medo de que um tentáculo subitamente o atacasse com um choque elétrico mortal.

Por enquanto, a única saída que me parece prática seria a de uma empresa que fizesse tudo para o consumidor. Entretanto, a necessidade de fazer propaganda para alcançar o público-alvo e o custo não teriam sentido econômico.

Uma saída interessante para os provedores, mas não para proto-empreendedores que sonham com a dominação mundial, como eu, seria as empresas de Internet oferecerem uma solução. Afinal, os provedores A e B poderiam ambos ganhar clientes da concorrência. Vou sugerir isso ao meu provedor local (porque o provedor grande, nacional, sequer consegue contratar um POS que funcione).

Essa odisséia toda me levou também a aprender uma coisa muito importante sobre a redundância. Todos os provedores que chegam ao meu condomínio, exceto um, vêm pela mesma rua e pelos mesmos postes. Quando um poste pegou fogo, apenas o provedor que chega por outra rua continuou a prover o serviço. Logo, uma redudância efetiva passa também por entender a infraestrutura da cidade.

quarta-feira, 28 de janeiro de 2026

Teste de Divisibilidade Usando Conversão de Bases

Há muitos anos eu havia escrito uma pequena função para fazer conversão de bases sem ifs. Mais recentemente, mostrei como o teste de divisibilidade por 3 ou 9 pode ser generalizado para todos os números usando a base+1.

Resolvi juntar as duas coisas e escrever um teste genérico de divisibilidade usando esses dois conceitos e ainda mostrando que a soma dos dígitos pode ser feita com o módulo apenas.

Sobre o módulo, considere o número 324. Para determinar se é múltiplo de 3, podemos trabalhar com módulo 3.


 3 + 2 + 4 = 9
 3%3 + 2%3 + 4%3 => 0 + 2 + 1 = 3
 

Então, isso significa que podemos trabalhar com números menores, o que pode ser útil quando estamos fazendo contas com lápis e papel ou quando o computador está trabalhando em números muito grandes.


use strict;

sub to_base {
  my $n=shift;
  my $base=shift;
  reverse 
    map { int(($n%($base**($_+1)))/($base**$_)) }
      0..int(log($n)/log($base));
}

sub is_divisible {
  my ($n, $d)=@_;
  my $t=0;
  
  map { $t=($t + $_ % $d) % $d } to_base($n, $d+1);
  return $t==0;
}

my $is_divisible=is_divisible(5603, 13);
print "5603 => $is_divisible\n";   

5603 => 1

De fato, 5603 = 13 * 431.

Alterei a antiga função to_base() para retornar um array dos valores dos dígitos. A função original usava o alfabeto para ampliar a variedade de dígitos.

sexta-feira, 2 de janeiro de 2026

Base de Resíduos e Números Afortunados

Já investiguei vários tipos de sistemas numéricos, mas há um que é bastante diferente dos outros, porque não há uma maneira direta para converter para outras bases.

Uma consequência do Teorema Chinês dos Restos é que podemos representar um número como um conjunto de restos. A única exigência é a de que os números da nossa base sejam primos entre si.

Por exemplo, se eu usar 2 e 3 como uma base, posso representar todos os números até 6. O 1 eu represento com a tupla (1,1), o 2 com (0,2), o 3 com (1,0), o quatro com (0,1), o 5 com (1,2).

Seu eu usar apenas números primos até 8 bits (são 53 primos), posso representar números até o seguinte:

64266330917908644872330635228106713310880186591609208114244758680898150367880703152525200743234420230.

Esse monstro de 101 dígitos necessitaria 334 bits para ser representado num computador. Entretanto, com o uso da aritmética modular, posso fazer muitas operações de apenas 1 byte. Repare que 53*8=424 bits, então não é espaço que é economizado, mas sim complexidade das operações.

Claro que produzir o resultado no final exige uma complicação adicional.

Adição e subtração são definidos assim:


(A + B) mod C = (A mod C + B mod C) mod C
(A - B) mod C = (A mod C - B mod C) mod C

Então, podemos ir somando números aos poucos e por partes até chegar a uma soma realmente grande sem nunca ter que operar com um número grande. Infelizmente, em algum momento será preciso converter para uma base mais prática para visualizar o resultado. Um algoritmo relativamente eficiente é o de Algoritmo de Garner, mas eu vou descrever uma forma de reconstruir o resultado que também nos ensina um pouco sobre esse tipo de base.

Dada uma base formada por (3,11,17), que podemos usar para representar números de 0 até 561 (3*11*17), e um número representado pelos restos (2,4,1), vamos procurar começando pelo primeiro número a satisfazer x%17=1, que é 1 (ou 18). Se formos somando 17, em algum momento vamos encontrar um número que, além de ter resto 1 para 17, terá resto 4 para 11. Ou seja, queremos resolver (18+(x*17))%11=4. Este número é 103. A partir de 103, precisamos encontrar um número que também tenha resto 2 para 3. Podemos pular de 187 em 187 (11*17). Ou seja, precisamos resolver (103+(x*187))%3=2. E isso nos leva a 290.

O que isso nos ensina? Os restos se repetem de 3 em 3, de 11 em 11, de 17 em 17, de 3*11 em 3*11, de 3*17 em 3*17, e de 11*17 em 11*17. E também de 3*11*17 em 3*11*17.

Agora vou introduzir os números afortunados. Um número afortunado é o menor inteiro maior que 1 que, somado a um primorial resulta num primo.

Se tivermos uma base de restos baseada em primos, sabemos que todos os casos em que nenhum dos restos for 0 é um candidato a primo. Por exemplo, vamos ver a base (2,3):

nn%2n%3
000
111
202
310
401
512

Os dois restos são diferentes de 0 com n=1 ou com n=5, que é primo. Claro que, numa base com mais elementos, um candidato a primo pode ser apenas um múltiplo de um primo que não está na base. O que é importante ressaltar é que o padrão de restos se repete. Então, quando estamos tratando de números maiores de 2*3, não temos como saber precisamente de qual número se trata: temos que viver dentro do universo de 0 a 5.

nn%2n%3
000
111
202
310
401
512
600
711
802
910
1001
1112

Se ignorarmos o 1, todos os casos em que nenhum dos restos é 0 representam primos.

O primeiro primo depois de 6 é 7, mas esse não conta, porque é necessário somar apenas 1 a 6. O próximo é 11 e o número afortunado, neste caso, é 5, que é primo. Dado que os restos da representação de 11 têm que ser iguais aos restos da representação de 5 (porque a diferença é 6), seria até surpreendente encontrar um caso em que o número afortunado não fosse primo.

Mas isso não é prova suficiente, porque poderia acontecer, numa base muito maior, que o número afortunado fosse múltiplo de um primo que não está no primorial (ou na base de resíduos, se preferir).

quarta-feira, 12 de novembro de 2025

Conto de 3 Estrelas

Zed dorme profundamente quando uma música muito suave começa a soar pelo despertador digital sobre sua mesa de cabeceira. O volume cresce aos poucos e a música ganha intensidade.

Quando finalmente está desperto e ordena que a música seja encerrada, o despertador solicita que a seleção musical seja avaliada. Quatro estrelas.

Ainda claudicante, Zed tateia o balcão do banheiro à procura do remédio. Surge, então, no espelho, uma enquete: qual dessas marcas você conhece? Zed ignora e vai procurar a cafeteira na cozinha.

O aroma dos melhores grãos colombianos deixa a cozinha quase que encantada. A cafeteira indaga: quantas estrelas esse café merece? Quatro, porque não é hora de responder a enquentes idiotas.

Alimentado, Zed volta ao quarto para vestir um terno, qualquer terno. O espelho mostra comerciais relacionados a seus sapatos e a seu terno. Ele poderia evitá-los, se pagasse o plano Ouro do espelho.

Dentro do elevador, Zed continua a ser bombardeado por comerciais. Talvez o plano Platinum do condomínio valha a pena para ao menos ter um pouco de paz de manhã. Antes de abrir a porta, o elevador oferece uma enquente: qual dessas marcas você recomendaria?

Zed senta dentro do carro e fecha os olhos por uns segundos. Muitos segundos. Então, ele suspira profudamente e dá o comando para o veículo iniciar.

—Bom dia, Zed. Já completamos mil viagens. Como avalias o Toyota e-5000?
—Podemos simplesmente ir? Tenho uma reunião.
—Neste caso, tenho algumas sugestões de livros sobre como melhor conduzir reuniões corportativas. Todos eles foram avaliados com 5 estrelas.
—Não tenho tempo para isso.
—Se avaliares a última compra, terás direito a um desconto em qualquer um desses livros. Pense bem.
—Ao escritório, já!

O transporte estaciona na vaga a tempo para a reunião, mas Zed ainda precisa avaliar a viagem. Cinco estrelas, apenas para não ter que justificar a avaliação. Bela maneira de conseguir boas avaliações, Zed grunhe entre os dentes, encher a paciência de quem não conceder 5 estrelas.

Ao entrar no elevador, um comercial submersivo acende com luzes fortes as quatro paredes, o piso, e o teto. Zed está um pouco irritado e dá um soco na porta, mas não forte o suficiente, pensa ele, para disparar os sensores de segurança.

O elevador silencia e o restante da subida se dá em silêncio. Que estranho.

Quando as portas finalmente se abrem, elas revelam dois seguranças. Zed é escoltado até o Setor de Incidentes Anti-Corporativos.

A polícia chega meia hora mais tarde e o leva até a delegacia, onde ele é identificado.

Dentro da cela, Zed deita-se e fecha os olhos. Um zumbido conhecido se aproxima: é o robô-recepcionista que ele mesmo projetou e que rendeu trilhões ao seu empregador.

—Bom dia, Zed. Lamento encontrar-te aqui, mas preciso fazer umas perguntas a respeito da abordagem policial desta manhã: que nota darias à limpeza da viatura, de um a dez?; que nota darias à cortesia dos policiais, de nove a dez?; como avaliarias a cela, de um a dez?

Infelizmente, a delegacia não oferece um plano sem comerciais na cela.

quinta-feira, 30 de outubro de 2025

Tampouco

Estou em campanha pela reabilitação da palavra "tampouco". Cada vez que escuto "eu também não", fico um pouco triste e irritado.

Não me parece certo usar um termo inclusivo para marcar uma negação.

Por acaso a minha linguagem de programação favorita, o Perl, tem unless e until para controle de fluxo e as linguagens mais populares não têm algo parecido. Os programadores são obrigados a usar negações nos ifs e whiles. Perde-se um pouco de expressividade e elegância.

Ademais, pode-se utilizá-los como modificadores de uma expressão, o que ajuda a traduzir diretamente um pensamento numa linha de código.



  my $count = 0;
  print "$count\n" until $count++ >= 10;

  print "On air\n" unless $status eq 'Off';

quarta-feira, 15 de outubro de 2025

Taxonomia das Necessidades Humanas

Eu vinha observando que as coisas consideradas de luxo tinham, acima de quaisquer considerações práticas, a qualidade de serem usadas para exibição pública: ostentação. Muitas coisas de luxo sequer são práticas, como carros baixinhos de dois lugares que mal conseguem navegar as ruas acidentadas de nossas cidades.

Após várias discussões filosóficas em família, chegamos à seguinte classificação das coisas que usamos:

  • Necessidade
  • Conforto
  • Privilégio
  • Luxo

Necessidades são as coisas básicas da vida: comida, roupas, um lugar para dormir e tomar banho, etc.

Conforto são as coisas que tornam a vida mais confortável, como água quente, sapatos confortáveis, eletrodomésticos, chuveiro a gás, um carro (em lugares com transporte público insuficiente), etc.

Privilégios são coisas que têm um pouco mais de qualidade, como sabonetes perfumados, oléo de banho francês, um carro japonês confiável, chocolate suíço, etc. Elas nos trazem prazer, mas não chamam a atenção.

Finalmente, luxo são, como anteriormente apontado, objetos ou serviços comprados para serem ostentados: carros importados caros, hotéis de 5 estrelas, roupas de marca, etc. É possível que essas coisas nunca tenham sentido econômico. Os carros da Toyota são reconhecidamente os carros mais confiáveis; carros como Ferraris e Porsches, apesar de serem muito mais caros, não alcançam a longevidade dos Toyotas e, portanto, só têm sentido se usados para ostentação. Os carros da Mercedes igualam a taxa de falha dos Toyotas até 5 anos, depois os Toyotas reinam solitários no topo do ranking da confiabilidade.

Por isso, eu penso que os itens de luxo são mais uma falha ou fraqueza de caráter do que qualquer outra coisa; estão aí para confirmar o sucesso do dono, ou suprir sua necessidade de reconhecimento, ou tentar apagar suas falhas.

O interessante dessa característica definidora do luxo é que ela vale para empresas. Quando surge uma nova moda tecnológica, é comum que seja adotada sem que seja avaliada na escala das necessidades.

Assim entram para as empresas o Big Data e a IA. Ninguém mede a necessidade, mas todos correm para implementar algo para então exibir ao resto da sociedade. A característica mais relevante é que é preciso ter porque os outros têm; o custo e os possíveis benefícios não são avaliados.

Claro que essas exibições de riqueza funcionam em alguma dimensão. Elas criam uma imagem de poder ou de sucesso. Desde sempre os ricos usam o luxo para se diferenciarem. Mas o melhor que uma pessoa ou uma empresa podem fazer é aprender avaliar o que é luxo e o que é necessidade, conforto, ou privilégio. Recursos que sobram podem ser usados para suprir mais necessidades, e mais confortos, e mais privilégios.