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.

segunda-feira, 1 de setembro de 2025

Multiplicação com o Algoritmo de Booth

A multiplicação russa é conhecida no submundo do assembly para 6502 como "shift and add", porque ela reduz a multiplicação a essas duas operações.

Um cidadão inglês chamado Booth notou que quando há sequências de 1s no multiplicador pode-se reduzir o número de operações.

Em poucas palavras, multiplicar x por 15 é igual a multiplicar x por 16 e subtrair x.


1111 * x = x<<3 + x<<2 + x<<1 + x
1111 * x = x<<4 - x

Podem existir várias sequências de 1s no multiplicador.


1110111 * x = x<<6 + x<<5 + x<<4 + x<<2 + x<<1 + x
1110111 * x = (x<<7 - x<<4) + (x<<3 - x)

A implementação é ineficiente e não vale a pena no 6502, talvez porque ele só tenha instruções para fazer um shift por vez. É um milagre que alguém consiga fazer algo com esse processador, mas Turing garante que tudo é possível.

Deve ser por terem convivido com tantas limitações que os criadores do ARM criaram instruções condicionais que fazem aritmética e shifts ao mesmo tempo, tudo numa só instrução.

Mas o que achei curiosa é a possibilidade de usar isso com o sistema decimal.


993.006 * x = 900.000*x + 90.000*x + 3.000*x + 6*x
993.006 * x = (1.000.000*x - 7.000*x) + 6*x

Operando manualmente, o número de adições reduz bastante:


993.006*123 => 123000000
                  161000 -
                     738 +
               122139738 =
               

Esse algoritmo é muito mais interessante no binário, porque a probabilidade de um bit ser zero ou um é de 50%, e, portanto, só vai realmente ajudar com uma classe específica de números decimais, mas é uma maneira interessante de ver a multiplicação.

terça-feira, 19 de agosto de 2025

Panela de Arroz

Eu ando muito interessado no Japão ultimamente. Tenho lido Sayaka Murata e Haruki Murakami. Entretanto, não é a cultura japonesa que me atrai; os artefatos é que me fascinam.

Há muitos anos, eu tinha um toca-fitas portátil vermelho. Eu acredito que ele era da marca Sanyo, que nem existe mais.

E, se minha memória não falha, era como o da imagem abaixo.

Quando eu tinha uns 10 anos, comprei um metro de cabo estéreo e dois plugues machos, e liguei o toca-fitas ao três-em-um do pai para poder copiar fitas de jogos.

Tem algo no design dos eletrônicos japoneses dos anos 1980 que considero muito atraente. Por exemplo, o MSX Hitbit 101 vermelho é o micro mais bonito já produzido.

Para não passar a impressão que tenho fixação com objetos vermelhos, eis uma linda máquina de escrever Brother Deluxe dos anos 1960.

Os japoneses até hoje fabricam produtos muito bons, mas a evolução da TI acabou com a necessidade de termos aparelhos dedicados para atividades distintas: tudo foi para dentro do celular.

Algumas coisas sobrevivem. Os celulares ainda não cozinham arroz e, é claro, os japoneses, sendo grandes consumidores do grão, inventaram uma panela perfeita para cozinhá-lo.

A Philco é uma empresa estadounidense, mas o projeto original é da Toshiba, dos anos 1950.

O que torna esse objeto tão interessante, fora o design (e a cor) é o mecanismo completamente analógico. Ela não tem nenhum processador dentro. Ela depende de um imã que perde a função de imã quando aquecido acima de 100°C. Quando a água toda tiver evaporado, o arroz esquenta acima dessa temperatura, o imã deixa de funcionar e o circuito abre, desligando o cozimento. É um pouco mais complicado, porque ela continua aquecendo o arroz enquanto não for desconectada da tomada. O funcionamento básico, porém, depende apenas de dois fenômenos físicos: o arroz não esquenta além da temperatura de ebulição da água enquanto houver água no recipiente; e o imã deixa de funcionar acima da temperatura de ebulição da água (cada tipo de imã deixa de funcionar numa temperatura diferente, a qual é conhecida como temperatura de Curie).

Ou seja, não tem muito o que dar errado. É um aparelho analógico perfeito. Apenas lamento não ter comprado uma antes, porque facilita muito o preparo das refeições.

Acho que essa panela só é tão perfeita, porque foi inventada antes de ser prático usar uma CPU. Se uma equipe fosse começar do zero hoje a criação de uma panela de arroz, posso apostar que teria um painel digital, uma MCU, e um software com muitos bugs. Além disso, claro, a placa controladora estragaria devido à exposição ao calor.

Por sorte, ela foi inventada por japoneses nos anos 1950.

quinta-feira, 3 de julho de 2025

O Verdadeiro Futuro da IA na Programação

A IA está por todos os lados e as previsões mais fantásticas estão sendo repetidas ad nauseam.

Eu ainda não usei IA para programar. Restringi-me a gerar umas imagens engraçadinhas. Entretanto, a IA veio até mim através de artefatos produzidos por programadores.

Os dois primeiros eram programadores fracos, então eu compreendi a dificuldade deles. O primeiro até foi honesto sobre estar usando IA. O segundo escondeu o fato até que fosse incontornável: o código dele tentava invocar uma função que não existe, além de tentar recompilar a si próprio numa tentativa estranha de ser dinâmico.

O terceiro foi uma grande supresa, porque o programador é um sujeito realmente competente. Entretanto, ele estava se aventurando numa área que não domina.

Eu acho que com essa última experiência podemos aprender algo.

Um dos livros que eu mais gosto tem o curioso nome de Zen e a Arte da Manutenção de Motocicletas. É um livro estranho: mistura filosofia com problemas mentais e uma viagem de moto. Em um dado momento, o autor discorre sobre como ele enfrenta a manutenção da moto. A pessoa precisa tanto de um modelo mental de como a moto funciona, assim como observar, no mundo real, seu comportamento. As duas coisas são importantes: um modelo mental razoavelmente sólido e correto e uma observação atenta.

Uma pessoa que tem um bom modelo mental de como uma coisa funciona é um especialista: um mecânico, um médico, um engenheiro, um programador.

A programação hoje em dia tornou-se uma tarefa das mais complicadas, porque envolve muitas tecnologias. Há muito tempo ninguém lida apenas com uma tecnologia sobre uma plataforma bem definida (Turbo C num PC, por exemplo).

As aplicações possuem muitas camadas e muitas tecnologias distintas. Inevitavelmente, as equipes mais produtivas incluem pessoas com habilidades complementares: não é novidade que a especialização é o motor da produtividade.

Isso me leva a concluir que a IA só vai ser realmente útil quando usada para complementar a habilidade de um especialista.

Se as empresas continuarem a demitir, porque acreditam que podem substituir pessoas por LLMs, antevejo que logo teremos problemas por causa de código gerado por IA. Tanto problemas de segurança, como problemas de perda de dados.

Se a pessoa não domina uma tecnologia, ela primeiro precisa estudá-la a fim de adquirir um modelo mental sólido para depois aplicar uma LLM. A IA deve até ser evitada até que o programador tenha um pouco de experiência com a tecnologia.

A minha conclusão é que a IA tem que ser usada como uma ferramenta para especialistas, não como substituta de especialistas.

quarta-feira, 14 de maio de 2025

O Pepe e o Sentido da Liberdade

Mujica faleceu ontem e pensar em sua vida me ajudou a organizar alguns pensamentos que venho alimentando.

Ele falou muito sobre a sua vida e suas escolhas. Apesar de muito admirado pela sua humildade, eu creio que, na verdade, ele era uma pessoa bastante orgulhosa da liberdade que havia conquistado.

O Pepe vivia numa chácara na periferia de Montevidéu, sobrevivia de suas plantações, tinha um Fusca (obviamente, velho), e uma casa simples. Enquanto presidente, doava boa parte de seu salário, porque não tinha utilidade para o dinheiro.

Eu trabalho com software e grande parte dele é vendido por grandes empresas multinacionais. Eu não tenho nenhum apreço por nenhum software proprietário. Detesto a Oracle, o Qlik, o Windows. A minha antipatia vem crescendo nos últimos anos, porque as licenças estão se tornando cada vez mais limitadoras da liberdade do usuário, sem falar na tendência de empurrarem tudo para suas respectivas nuvens.

O software livre tem a fama, injusta, de ser difícil e de não haver o suporte que uma empresa grande poderia oferecer. A minha experiência é que não preciso de suporte para Linux ou Postgresql, porque eles não dão problema (pelo menos, nenhum problema que eu não consiga resolver), enquanto a Oracle é uma fonte infindável de bugs, complicações, e, para piorar, questões de licenciamento que ditam o que pode ser feito e quando tem que ser feito.

A escolha pessoal pelo software livre pode implicar ter que abdicar de algumas coisas, como o Excel ou alguns jogos do Windows. Eu realmente não sinto falta dessas coisas. Há muitos jogos para o Linux e o LibreOffice supre minhas necessidades. Eu sigo esse caminho conscientemente: é a minha escolha e eu usufruo das liberdades dela e o que ficou no outro caminho não me incomoda.

Um computador é uma máquina e deve servir a mim, não a quem a vendeu. As minhas máquinas de trabalho em casa são como o Fusca do Mujica: têm CPUs de 15 anos (i3-540 e Athlon II X4). Enquanto elas cumprirem o que devem, não vou gastar dinheiro para comprar uma máquina mais moderna.

Eu vejo pessoas comprando e vendendo produtos da Apple por preços absurdos e me pergunto como um equipamento acabou por se tornar um item de luxo. Percebo, então, que as coisas de luxo, na realidade, não têm sentido. As roupas de marca, os carros importados, as joias, não oferecem muito mais que a oportunidade de ostentação.

As pessoas estão presas a necessidades que não escolheram conscientemente.

A liberdade é uma escolha que exige, à primeira vista, sacrifícios. Entretanto, acho que é muito mais uma questão de se libertar de pressões que nos são impostas por nós mesmos e sugeridas pelo ambiente. Uma vez escolhido o caminho, os obstáculos são os pontos de apoio para nos impulsionar adiante. Eu escolhi o Linux e estudo os detalhes e cada vez consigo fazer coisas mais interessantes. Uma amiga vegana sabe tudo sobre plantas, conhece receitas, fornecedores, cultiva alguns alimentos em casa. Não é um sacríficio, porque é um caminho tomado conscientemente.

Enquanto isso, as pessoas que ainda não adquiriram consciência de suas necessidades vivem reféns de modas, influenciadores, comidas ultraprocessadas, roupas de marca. E com tudo isso vêm os problemas de saúde, tanto do corpo como da cabeça.

Mujica foi um tipo de influenciador alternativo. Ele era autêntico. Os influenciadores de mídias socias são falsos e as pessoas se apegam a eles talvez por alguma necessidade de pertencimento ou aprovação. Eles são mais um mecanismo do capitalismo tardio para aprisionar as pessoas a noções idiotas sobre como viver e a expectativas fantasiosas sobre beleza.

A liberdade, então, é encontrar o próprio caminho e libertar-se das expectativas alheias. Isso exige um pouco de reflexão e talvez um pouco de coragem; as mídias socias e o marketing não vão ajudar. É importante se desligar um pouco dessas coisas, porque a futilidade que reina começa a se tornar bastante irritante.

Um brinde ao Pepe por uma vida bem pensada e pelas reflexões que nos deixou.

sábado, 29 de março de 2025

Máquina do Tempo

Comprei um relógio Casio em 2025. Escolhi o modelo W217HM-7BV

Minha inspiração inicial foi um artigo sobre o Casio F91W, o modelo mais barato da Casio. Alguém abriu um F91W, encheu com óleo de silicone, e o baixou até quase 5 mil metros de profundidade.

Uma breve pesquisa me revelou que há um universo de pessoas que se divertem fazendo modificações nesses relógios baratos. Existem até mecanismos alternativos, com mais funções. Não há nada que me provoque mais do que um produto que pode ser alterado e usado para além do projeto original.

Eu tenho, entretanto, outros motivos para comprar um relógio. Há décadas eu não usava nada no pulso.

Há 20 anos, havia relógios nas paredes de quase todos os lugares públicos. Acho que as pessoas cansaram de trocar as pilhas e já são raras as demonstrações públicas de pontualidade.

Ademais, eu percebi que há momentos em que preciso saber as horas, mas não quero carregar o celular. As pulseiras fitness que estão na moda são legais, mas precisam ser carregadas a cada poucas semanas e as pulseiras estragam com frequência. Os smartwatches precisam ser carregados diariamente e são caros.

Eu comprei o W217HM-7BV por menos de R$200 e a bateria dura pelo menos 7 anos.

Eu teria, na minha infância, usado o cronômetro para mensurar incontáveis corridas. Agora, perdi o apetite pelas as competições e uso o cronômetro para fazer os ovos cozidos do café da manhã.

Evidentemente, há um forte apelo nostálgico. O pequeno eu teria ficado muito feliz com esse relógio e eu me alegro por ele.

segunda-feira, 10 de fevereiro de 2025

Como Verificar uma Lista de IPs

Um domínio pode ser provido por muitos IPs distintos, então surgiu para mim a necessidade de determinar qual IP não estava respondendo.

O dig permite descobrir rapidamente quais IPs estão relacionados ao domínio no DNS.


dig +short some.random.domain
192.168.10.20
192.168.10.21
192.168.10.22
192.168.10.23

Faça de conta que a minha lista de IPs é bem grande. Quero testar todos, mas sem perder muito tempo em cada um. Para ser mais rápido com o ping, podemos usar umas opções incomuns:


ping -w 1 -c 2 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.

--- 192.168.10.20 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

O -w 1 encerra a espera com 1s e o -c 2 emite apenas 2 pacotes ICMP. Ajuste conforme sua necessidade

Então, para percorrer toda a minha lista e apenas imprimir os IPs que não responderam, lançamos mão do xargs e do grep.


dig +short some.random.domain | \
  xargs -I{}  ping -w 1 -v -c 2 {} | \
  grep -B1 "0 received"
--- 192.168.10.20 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

O -B1 do grep nos permite mostrar a linha anterior ao resumo dos pacotes, já que o ping não coloca tudo na mesma linha.