Showing posts with label computação. Show all posts
Showing posts with label computação. Show all posts

2009/05/16


A fonte dos diferentes tipos de pessoas

Existe aí pela Internet uma tal história de como o Steve Jobs, que seria um bobão sem habilidades, se deu bem em certo período de sua vida porque em certo momento no desenvolvimento das máquinas da Apple ele pôde aplicar conhecimentos de tipografia que teria adquirido de forma absolutamente casual em seu curto período no ensino superior. A história anda sendo citada por outros porque ilustraria o conceito de que toda a educação tem que ser recebida sem reclamar, porque você nunca sabe o dia que vai poder virar um milionário por ter aprendido a coisa certa no momento errado, mas aí um dia se ver de repente no momento certo.

Não tenho nada contra o Steve Jobs, acho um sujeito bacana. Mas fico triste de ouvir essa história por dois motivos. Primeiro porque faz ele parecer apenas um tolo em cuja cabeça caíram várias felicidades. Uma marionete da boa fortuna. Será que ele é apenas isso mesmo?

Segundo porque a história ao mesmo tempo pinta a tipografia como um assunto árido, como é talvez a trigonometria para alguns, e omite a existência das várias pessoas que contribuíram não só para o desenvolvimento da tipografia antes do Steve Jobs, mas figuras ilustríssimas do desenvolvimento da própria "tipografia digital", que a história dá uma impressão de ter sido inventada ao todo pelo Jobs.

Existem no mínimo dois nomes que devem ser sempre citados quando pensamos na história da tipografia computacional, e são duas pessoas que possuem uma grande paixão pelos dois temas, mesmo que tenham se especializado em apenas um.

Hermann Zapf, alemão nascido em 1918 e vivo até hoje, foi estudar tipografia após desistir (apenas por questões "logísticas") de seguir uma carreira de engenheiro eletricista. Foi nos anos subsequentes à WWII que ele criou alguns de seus tipos mais famosos, como a Palatino, que é uma de minha favoritas, e uma grande fonte de inspiração para outros criadores de fontes. Isso foi antes, portanto, dos computadores invadirem nosso cotidiano. Lá pro começo dos anos 1970 Zapf "cismou" em tentar desenvolver programas de computador para tipografia. Encontrou certa resistência no início, mas eventualmente as engrenagens da sociedade moveram-se nesta direção. Em 1977 ele se estabeleceu em uma empresa pesquisando tipografia digital, e nos anos 80 fundou outra empresa que foi eventualmente comprada pela Adobe nos anos 1990.

A outra figura é alguém que eu admiro muito, Donald Knuth. Um grande autor da área de ciência da computação, e um pioneiro que ajudou a criar a própria idéia da tal ciência, ao receber certa vez as provas tipográficas de um livro seu, achou tudo feio demais. Mas na mesma época ele viu em algum lugar o funcionamento de algum programa moderno de tipografia digital, e ficou encantado com a idéia. Naquele ano começou a planejar o seu próprio programa de tipografia, o TeX. A primeira versão rodava em um PDP-10.

Vale a pena mencionar en passant, pra termos noção do estado que a computação gráfica já se encontrava nos anos 1960 e 1970, que a formas mais comuns de desenhar letrinhas bonitas, as famosas curvas de Bézier, foram popularizadas em 1962. Bézier era designer de automóveis, e este tipo de curva veio bem a calhar para seu trabalho. Mas ele não realmente inventou nada mesmo não: as curvas não passam de cúbicas, e sua introdução na informática já se dera bem antes... Ele apenas "usou pra valer".

Knuth e Zapf tiveram a felicidade de trabalhar juntos em 1983 num tipo chamado AMS Euler, encomendado pela American Mathematical Society.

Aí então eu pergunto. Como pode ser que a tipografia digital tenha tanta história, e tantos personagens interessantes, pessoas apaixonadas tanto pela tipografia em si quanto pela computação, e aí a gente de repente precisa engolir essa ladainha do Steve Jobs? O Lisa (que ele nem menciona) e o Macintosh só começaram a ser desenvolvidos lá pra 1978. O Macintosh foi anunciado ao público em Outubro de 1983, quando, como pudemos ver, o trabalho ali do Knuth já tava bem avançado. Mais do que isso, já até existiam outros programas, como o tal programa que inspirou o Knuth antes.

O crédito que o Jobs merece é ter trazido isso para o desktop, assim como ter investido em interfaces gráficas. Foi mesmo algo muito legal. Mas ele não pode posar de grande visionário, fingir que inventou essas coisas. Ele é só um bom empresário, que pegou tecnologias existentes e levou até o varejo.

Me acompanhem aqui num passeio pelo tal discurso dele de 2006. Vejam o que ele fala sobre quando estudou caligrafia:

It was beautiful, historical, artistically subtle in a way that science can't capture, and I found it fascinating.

Grande "tecnólogo". Um sujeito que tem dificuldades em ver o belo naquilo que é "científico". Sinto pena pela má formação dele, que lhe causou esses traumas de ter pesadelos à noite com trigonometria, e essas coisas que não são "belas, históricas, sutis e fascinantes". Sorte que nem todo mundo pensa assim, tem gente no mundo como o Knuth, o Zapf, eu, e imagino que muitos de meus leitores... E como ele foi fazer o tal curso, afinal? Atirou um dardo e se matriculou no curso em que caiu?

Mais pra frente ele diz

If I had never dropped in on that single course in college, the Mac would have never had multiple typefaces or proportionally spaced fonts. And since Windows just copied the Mac, its likely that no personal computer would have them. If I had never dropped out, I would have never dropped in on this calligraphy class, and personal computers might not have the wonderful typography that they do.

Essa deve ser uma das coisas mais pretensiosas que eu já li na minha vida, de tal intensidade que prefiro não comentar aqui. Sei que quando estou bravo escrevo grandes discursos raivosos, porém maçantes... Se eu fosse parar pra falar longamente de tudo que me incomoda e me dá raiva na vida, não sobraria tempo pra viver.

Talvez ele e a Apple realmente tenham tido um certo papel de Prometeu contemporâneo, sendo grandes responsáveis pela popularização de algumas tecnologias no público mais lammer. Afinal de contas, rodar TeX em desktop não era realmente comum talvez até lá pros anos 1990... Mas essas coisas já estavam todas por aí, a informática não começou só com os microcomputadores dos anos 80. Outras pessoas inventaram essas coisas pelas quais o Steve se vangloria e que o Bill teria "copiado dele" depois. Outros já tinham "pioneirizado" o caminho, inventando as interfaces gráficas, por exemplo. Ele não foi explorador, foi só o vice-rei que veio coletar os espólios.

Metido nojento.

Mas é como dizem, quem come maçã com casca, semente e talo está bem informado a respeito de suas peculiaridades fisiológicas.

2008/07/10


Just works

Estava aqui com uma imagem de um CD feita não sei como, e queria montar no meu sistema usando o velho macete:

mount -o loop


Pra quem não sabe, no Linux vc consegue montar imagens numa boa, não precisa de nenhum aplicativo mágico especial não. Esse programa "mount", é exatamente o mesmo que monta qualquer outro dispositivo no sistema, incluindo seus HDs.

O arquivo da imagem tinha a extensão "iso", mas não funcionou. Resolvi dar uma olhada com hexdump pra ver obtinha alguma luz. Não é nenhuma genialidade minha não, é que às vezes tem uns headers óbvios no começo de arquivos. Por exemplo, em arquivos PNG temos:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 04 5a 00 00 03 20 08 02 00 00 00 9c 42 91 |...Z... ......B.|
00000020 ed 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b |í....pHYs.......|
00000030 13 01 00 9a 9c 18 00 00 00 07 74 49 4d 45 07 d7 |..........tIME.×|


Já nos PDF:
00000000 25 50 44 46 2d 31 2e 33 0d 25 e2 e3 cf d3 0d 0a |%PDF-1.3.%âãÏÓ..|
00000010 36 38 31 20 30 20 6f 62 6a 0d 3c 3c 20 0d 2f 4c |681 0 obj.<< ./L|
00000020 69 6e 65 61 72 69 7a 65 64 20 31 20 0d 2f 4f 20 |inearized 1 ./O |
00000030 36 38 33 20 0d 2f 48 20 5b 20 31 31 31 30 20 31 |683 ./H [ 1110 1|


Perceberam? É óbvio, tem um textinho escrito... Queria ver se tinha algo assim, mas não tinha não, o que tinha era isso:

0000000 ff00 ffff ffff ffff ffff 00ff 0200 0200
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000930 ff00 ffff ffff ffff ffff 00ff 0200 0201
0000940 0000 0000 0000 0000 0000 0000 0000 0000
*
0001260 ff00 ffff ffff ffff ffff 00ff 0200 0202
0001270 0000 0000 0000 0000 0000 0000 0000 0000
*
0001b90 ff00 ffff ffff ffff ffff 00ff 0200 0203
0001ba0 0000 0000 0000 0000 0000 0000 0000 0000
*
(...)
*
00089d0 ff00 ffff ffff ffff ffff 00ff 0200 0215
00089e0 0000 0000 0000 0000 0000 0000 0000 0000
*
0009300 ff00 ffff ffff ffff ffff 00ff 0200 0216
0009310 0000 0009 0000 0009 4301 3044 3130 0001
0009320 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
0009c20 ebc1 1b7c 9558 31ab 976b 5c00 dcf6 0019
0009c30 ff00 ffff ffff ffff ffff 00ff 0200 0217
0009c40 0000 0009 0000 0009 4302 3044 3130 0001
0009c50 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
000a550 02dd bee4 634a 8e1a fa7c fbaf 9560 b68b
000a560 ff00 ffff ffff ffff ffff 00ff 0200 0218
000a570 0000 0009 0000 0009 43ff 3044 3130 0001
000a580 0000 0000 0000 0000 0000 0000 0000 0000
*


Comparei com uma imagem ISO criada por mim mesmo (com genisofs), e não apareceu nada assim...

O que vemos neste arquivo são blocos de 2352 bytes (0x930), com um header de 16 bytes que é um monte de "ff", e um número seqüencial. Achei que tinha cara de algo mais "cru" do que o tal formato iso9660... Talvez fosse o famoso par de arquivos "cue/bin", mas sem o cue acompanhando? Infelizmente não me lembrava de cor do tamanho de um quadro de CD pra saber se era.

Busquei no google, "2352 bytes", já que era um número tão incomum (nada como "2048 bytes", por exemplo), e de fato achei vários sites falando sobre imagens de CD e formatos de CD... Um cara reclamava por exemplo que estava criando uma imagem e ela estava com 2352 bytes a menos do que devia...

No final das contas achei enfim alguém comentando que havia mesmo a possibilidade de se encontrar por aí imagens "bin" sem o "cue", e que tinha que usar um programinha macete pra criar o cue, tipo um tal bin2cue.

Resolvi tentar, porque era a única coisa que faltava. Já tinha inclusive tentado antes converter como se fosse um tal formato ccd.

Mas aí dessa vez procurei no apt por outros programas que pudessem fazer o serviço. E aí apareceram:

cyberon:/home/nwerneck# apt-cache search bin iso cd
bchunk - CD image format conversion from bin/cue to iso/cdr
iat - Converts many CD-ROM image formats to iso9660
mybashburn - Burn data and create songs with interactive dialog box
texlive-latex-extra - TeX Live: LaTeX supplementary packages
arson - KDE frontend for burning CDs


Uau! Peguei o tal iat, rodei, e tchanãnãnã!... Funcionou com perfeição.

Da próxima vez que tiver um mistério desses, é claro, vou tentar antes rodar direto o tal iat, mas vou perder a oportunidade de relembrar que quadros de CD tem 2532 bytes... (Não lembro porquê esse número, vou pesquisar.)

Achei essa história toda um belo exemplo de como ser um pouquinho hacker (não ter medo ou vergonha de brincar com o hexdump), e usar o apt, você pode resolver seus problemas... Do hexdump descobri que o arquivo era um conjunto de pacotes de um tamanho característico de CDs, me confirmando que devia ser mesmo alguma imagem, e mais do que isso, uma imagem "crua", nada muito sofisticado. Isso me deu segurança pra seguir em frente, me garantiu que não era um pau do bittorrent, por exemplo, ou que fosse um arquivo compactado de alguma forma estranha, ou encriptado. Aí no APT descobri um programa excelente pra converter o arquivo, que não vi mencionado em blog nenhum, mas estou mencionando aqui no meu agora.

É isso aí. Usando linux, hexdump, google, apt e o iat, e dando um mount -t iso9660 -o loop, tudo "just works", igual as pessoas acham que apenas certas plataformas alternativas oferecem...

O quão fácil é descobrir o formato de um arquivo no wimdoms, descobrir um programa pra converter ele (tem apt-cache search??) e depois montar? O wirduws só "detecta" coisas manjadas, que ele consiga desenhar o iconezinho, coisas "cadastradas" no sistema... Detecção de formatos é apenas um instrumento de barganha capitalista pra micozofrt, e aliás, freqüentemente a detecção é realizada com base na EXTENSÃO DO NOME DO ARQUIVO, que diga-se de passagem, estava precisamente errada nessa instância.

Me pergunto que não estava assim pra que na máquina de alguém o winpouf "detectasse" que era pra chamar algum programa fodão de montar imagens, e aí esse programa que descobre que não era iso na verdade, e sim outro... É ridículo, um arquivo chamado com um nome errado pras coisas funcionarem redondo. Isso que é "just works"?

No Debian as funcionalidades de procurar programas e montar CD são praticamente "nativas"...

2008/07/02


Um dia na vida de um micreiro empolgado

Meu notebook HP (Compaq Presario V6210BR) teve um problema na placa de rede sem-fio. Funcionava muito bem, aí de repente começou a funcionar às vezes só, mas uma vez que ela ligava no boot, funcionava direto... Até que um dia parou de funcionar de vez.

Ontem resolvi acabar com o sofrimento, comprei uma dessas interfaces ("placa de rede") wi-fi que ligam via USB. Mas aí é a velha dúvida do usuário de Linux: será que funciona?

Normalmente é só ver o modelo e procurar na Internet pra saber se alguém já rodou. Mas é muito chato ficar indo na loja e na Internet toda hora, então muitas vezes a gente acaba é comprando às cegas mesmo. Comprei assim essa paradinha da D-Link, marca por que eu nutro uma certa simpatia. É tipo um pendrive grossão, com uma base pra ligar ele em pé e ficar parecendo o monolito do 2001.

Primeira tentativa de usar a parada: Liguei na minha máquina, bootei com meu kernel cotidiano, e ela apareceu bonitinho no lsusb. Faltava só tentar usar o ndiswrapper pra rodar o driver original do windows, igual eu fazia já com a finada placa antiga. Mas aí a decepção: eu uso um kernel para 64 bits (óbvio, estamos em 2008 e acho um absurdo pensar em usar coisas de 32 bits), mas o driver que veio é pra 32 bits, aí o ndiswrapper não consegue aproveitar o bicho. Tristeza total.

Aí veio o desafio: estava em casa já, sem conseguir consultar o oráculo internético pra me ajudar. Será que eu conseguia rodar um kernel de 32 bits e usar provisoriamente a paradinha?... Com minha instalação normal não tinha como, porque só estava lá meu kernel do dia-a-dia mesmo, e eu não tenho nem um CDzinho de instalação do debian (falha grave). A única possibilidade seria tentar rodar o knoppix (esse eu sempre tenho um), e tentar usar o ndiswrapper dentro dele.

Copiei os drivers pro meu HD, liguei o knoppix, e rodei o ndiswrapper. Funcionou! Rodei o wpa_supplicant com exatamente o mesmo arquivo de configuração que eu sempre usei, e funcionou também.

Agora era hora do dhcp, e pegar a prancha pra surfar. Qual o que... No knoppix não tem dhclient, único cliente de dhcp que já consegui usar direito; só tem o pump. Confirmando minha desconfiança, o pump não funcionou. Poisé. Só me restava tentar dar um jeito de executar o dhclient do Debian no meu HD. Tentei rodar o /sbin/dhcleint, mas é claro que não funcionou, porque era a versão 64bits... Tristeza: ou eu uso um kernel de 64 bits e rodo o dhclient, mas não o driver, ou rodo o kernel de 32 e rodo o driver, mas não o dhclient...

Mas havia uma última esperança. Acontece que eu tenho um sisteminha chroot na minha máquina, que uso pra rodar coisas chatas como o flash e o acrobat reader. E se por um acaso tivesse um dhclient lá dentro?... Fui conferir, e não é que tinha?? Rodei, de um errinho, e entendi que era só copiar os programas /mnt/sda6/32root/sbin/dh* pro /sbin do knoppix... Rodei de novo o dhcleint na árvore do knoppix, e tcha-nã!... Funcionou!!!...

Agora eu já tinha um procedimento pra entrar na Internet a hora que eu quisesse... Uma seqüência de passinhos me permitindo ler e-mails, entrar no google talk e fazer downloads de drivers e pacotes, que maravilha.

Então pesquisei sobre a minha paradinha D-Link wi-fi/usb DWA-110. Achei vários sites falando sobre usar o ndiswrapper, e alguns até indicavam que seria possível baixar um certo driver 64bits que funcionaria. Acontece que o DWA-110 é baseado num tal chip rt73, que parece ser bastante popular, e um driver de windows pra ele faria o serviço.

Ah! Achei ainda no site da D-Link um download de um driver pra Linux!... Eles não falar nada na caixa, mas no site tem. Só que eu peguei e me pareceu ser uma coisa tosca, que eu só tentaria usar em último caso (um lance não compatível com iwconfig, horrível!)

Acontece que é tão popular o tal rt73, que existe um projeto pra suportar estes dispositivos no Linux nativamente. Procurando, achei vários sites com diquinhas pra tentar usar esse driver...

Tentei baixar o fonte, compilar o módulo pro meu kernel, e nada... Tentei o cvs, tentei o fonte distribuído pelo Debian, e nada...

Aí veio a tentativa lógica: estava com o linux 2.6.22, mas já tinha um 2.6.25 disponibilizado, até com um pacotinho do módulo do rt73 compilado pra ele. Fui lá no knoppix, fiz aquela gambi toda, e downlodeei o pacote com a imagem do linux e com esse módulo. dpkg -i, reboota, e tchans! Funcionou!!

Um bom presságio já me havia indicado que tudo haveria de dar certo no final: Junto dos manuais maçantes e papeizinhos de advogado, na caixa da paradinha veio uma cópia impressa da GPL.

Nisso já consegui ler e-mails no mutt, conversar no freetalk e usar o museek. Mas só isso, no console, porque o X parou de funcionar... Fui dormir já bastante satisfeito.

De manhã compilei o driver oficial da nvidia usando o pacote oficial do Debian. "m-a a-i nvidia", e pronto, que beleza... Depois foi só atualizar o pacote nvidia-glx e correr pro abraço, relatando-lhes essa história através do iceweasel 3.

***

Notem que usei só console pra isso tudo, sem contar o browser na hora de pesquisar as coisas. E mais ainda, que em todo o processo eu fui tendo idéias de coisas pra tentar fazer, e fui sendo eventualmente recompensado com pequenos sucessos. Achei atalhos, fiz gambiarras, descobri caminhos alternativos... E no fim deu certo. Comprei um dispositivo com inúmeros selinhos "aprovado para uso com windows vista" e outras baboseiras, com o vendedor me dizendo que não podia me garantir se funcionaria com Linux ou não, que ele não tinha idéia e que isso era problema meu, mas de noite botei o bicho pra funcionar.

É isso que eu sentia falta no windows. Poder usar meus conhecimentos e poderes hacker pra encaixar as coisas no lugar com durex, e conseguir um sistema minimamente funcional pra então deixar ele mais sólido na base de um apt-get da vida. Meu lema em informática é "pode tudo". O que eu mais gosto de fazer na vida é ver um conjunto de dispositivos, ter um sentimento de "uai, deve ser possível fazer isso aqui... Deve ter um jeito de fazer isso", tentar descobrir como, e conseguir.

Chegou um momento na história do windows em que isso tudo ficou impossível... Se as coisas param de funcionar, vc fica apertando botãozinho de orelha escondida de menu bizarro, ou sei lá, tentando editar o infame "registro". Por mais que você tente escovar bit, não recompensa. Ser engenheiro e usar windows não recompensa mais... No Linux não, esse tipo de piração, essa manobras administrativas detetivescas, elas recompensam. Você não fica com a ilusão de que não adianta porcaria nenhuma ter lido zilhões de livros sobre computação, não, o estudo vale a pena pra quem usa Linux...

Recapitulando: no final das contas tudo se resumiu a instalar pacotes do Debian, eventualmente contruíndo-os com o module-assistant. Difícil foi descobrir, mas agora eu posso simplesmente ensinar pros outros, como estou fazendo agora. Se algum amigo meu que usa Linux no notebook quiser comprar um DWA-110, posso falar pra ele rodar:


apt-get install linux-image-2.6.25-2-amd64 rt73-modules-2.6.25-2-amd64


E a placa de rede vai (deve) funcionar igual sua placa anterior já funcionava. Aí é só atualizar também o driver da nvidia (isso se for o caso):


m-a update
m-a auto-install nvidia


Essas 3 linhas de comando fazem o serviço. Isso é "difícil"?? Acho muito mais fácil do que aqueles maçantes tutoriais ensinando a fazer coisas no windows, em que gastam-se páginas e mais páginas imprimindo screenshots de janelinhas, com textos tentando em vão descrever de forma concisa o que deve ser feito "cliquem em yadayada/zubalula/bliblibli, depois clique em xxy, depois selecione o lalala na combo box (nota: clique na setinha da combo box para que as opções apareçam, e a selecione com o mouse, ou talvez com o teclado (nota: talvez demore um pouco para aparecer as opções, porque o sistema tem que ler todas, e ainda tem o efeito de fade-in...) )".

Esses manuais de windows são terríveis, gastam inúmeras páginas e figuras e imagens com algo que deveria ser reduzido a uma simples operação.

Em administração de sistemas aquela história de que uma imagem vale mil palavras é o contrário... No windows gastam-se mil imagens (todas janelinhas ícones e botões) para se configurar sistemas, o que é melhor realizado com arquivos texto pequenos e comandos simples.

As pessoas não querem chegar no dia da interface falada? Não querem poder ligar o computador, e pedir, como na música dos Mutantes: "computador me responde"?... O que está mais próximo disso, a interface de linha-de-comando, onde se enunciam frases de uma forma dialética, ou aquelas milhares de janelinhas que são como quebra-cabeças, charadas a serem decifradas, testes de QI?

Essas janelinhas do mundo windows são como testes de QI, ou talvez aqueles brinquedinhos de criança em que tem os buracos de um formato e vc tem que encaixar as pecinhas no lugar certo... Adultos não brincam com isso, eles preferem conversar. Preferem estudar o que tem que ser dito, e então dizer. Fazem as coisas porque concordam que é a forma de ser feita, e não porque tem uma coleira ou cerca os obrigando a ir nesa ou aquela direção (janelinhas que te obrigam a apertar o botão certo, etc...)

Os programadores de interfaces gráficas chamam essas janelinhas deles de "diálogos", mas o quão dialética elas realmente são?

2008/04/05


A metamorfose de Michael Jackson

Estava aqui agora sendo obrigado a assistir uns clipes do Michael Jackson, e comecei a reparar numas coisas que nunca tinha antes...

Todo mundo há de concordar comigo que o efeito de morphing ganhou notoriedade por causa daquele clipe do Michael Jackson, Black or White (1991). Eu mesmo fiquei muito empolgado com aquilo, poucos meses depois comprei um livro sobre computação gráfica e processamento de imagens, e alguns anos depois vim a estudar assuntos similares na faculdade...

O que eu reparei é que já no clip de Billie Jean (1983), tem um lance dum gato que entra atrás duma lata de lixo, e vira outra coisa!

Em 1995 o Michael fez um clipe lá com a Janet, chamado Scream, que também tem um morphing com a cara dele.

Estes dois vídeos, claro, vieram depois do furor midiático sobre ele ter mudado de cor e de formato. Em 1993 ele falou sobre o assunto na Oprah, o que marca bem a intensidade que o assunto tinha por essa época.

Claro que não'e novidade pra ninguém que o morphing da cara dele pode ser visto como tendo relação come sse problema, mas eu nunca tinha compreendido a fundo que essas acusações dele ter feito x plásticas e mudado de cor, é basicamente uma acusação dele ter feito um morphing na vida real!...

Tipo, nos vídeos o que aparece é um morphing acelerado. O que é engraçado ver é que quando ele faz no vídeo, todo mundo acha engraçado, acha uma coisa "do futuro", acha muito doido, vira fã. Mas se o cara faz um morphing mais lento, fora da telinha, aí ele é crucificado e jogado na fogueira!...

O Michael está é expondo essa hipocrisia da sociedade. "Porque pode fazer morph no video-clipe, e não pode na vida real"??... É tipo isso.

O melhor de tudo é que também não é novidade pra ninguém a importância da metamorfose na psique humana. E também o fato que de nós mesmos passamos por modificações físicas lentas em nossas vidas, em especial passando de criança a adolescente, adulto, velho e múmia. Aí eu pergunto, será que é o Michael tem mesmo problemas, e as modificações dele são uma coisa patológica e condenável, ou somos nós que temos dificuldade de lidar com morphing em geral, e o condenamos por nos obrigar a se lembrar desse fenômeno?...

Talvez assistir mais uns um milhão de vezes aos clipes dele nos ajude a desencanar das metamorfoses nossas e dos outros. E assim nos prepararemos melhor para aquele fatídico dia Kafkiano, em que despertaremos trazendo entidades morféticas ocultas para o mundo da vigília.

2008/01/17


O colar de pérolas negras

Já que todos dizem que é legal fazer "divulgação científica", e como todo problema de matemática tem que ter uma historinha pra acompanhar, pra ser divertido, aqui vai o tenebroso...

PROBLEMA DO COLAR DAS PÉROLAS NEGRAS

Na ilha de Lesbos, na Grécia antiga, havia uma matemática chamada Sapro. Ao completar 16 anos, Sapro jurou que se casaria apenas com um homem capaz de resolver um problema matemático proposto por ela.

Sapro pegou uma linha, e colocou nela três pérolas: uma preta e duas brancas, e amarrou a linha formando um colar (sim, um colar meio feio, com a linha aparecendo...)

A cada ano de vida, Sapro pegava outra linha, desamarrava o colar, e fazia outro maior, colocando pedras no novo colocar de acrodo com cada pedra do colar antigo, como ao rezar um terço bizantino. As pedras devem ser colocadas da seguinte forma:

Para cada pérola negra encontrada, passe ela para o novo colar, e substitua a pedra seguinte por uma hematita e uma pérola branca (a branca se torna a primeira pedra do colar velho).

Cada pedra branca encontrada é passada imediatamente para o novo colar.

Para cada hematita, colocar uma pedra branca no colar novo, e substituir a pedra seguinte no colar antigo por uma pérola negra.

Note que pode acontecer da última pedra do colar antigo ser uma pérola negra ou uma hematita, o que requer uma substituição da pedra seguinte. Nesse caso a substituição deve ser feita nas primeiras pedras do colar novo (que são são as "seguintes" ao se fechar o colar).

Sapro propôs então: "Só hei de me casar com um homem, se um dia aparecer um que me presenteie com um fórmula algébrica para o número de pedras de meu colar para cada ano de minha vida!..."

Aos 16 anos, portanto, seu colar tinha 3 pedras. Aos 17, 5 pedras, sendo uma delas uma hematita grande, que servia de pingente. Aos 18 anos, seu colar adquiriu 7 pedras. É dito que neste ano Teseu pretendeu desposar de Sapro, dizendo que o colar adquiriria a cada ano os sucessivos números ímpares, e preveu 9 contas para quando a jovem matemática atingisse 19 anos.

Ele ficou desapontado, entretanto, ao ver que quando completou 19 anos, Sapro reformulou seu colar e este adquiriu 10 contas ao invés de 9.

O matemático Hipparcus previu que o colar eventualmente cresceria com uma fórmula exponencial, com um ruído alternativamente negativo e positivo. Isto foi verdade dos 27 aos 32 anos, mas aos 33 a sua fórmula deu um ruído positivo, repetindo o anterior. A fórmula de Hipparcus foi

(73/40) * (3/2)^(n-15) .

Sapro morreu neste mesmo ano, no cerco de Corinto em 146 AC, a caminho do -XXVIII congresso de matemática pura e aplicada de Siracusa.



A configuração de todos os colares de Sapro a partir dos seus 16 anos, o número de contas, e a configuração das pedras está abaixo. ('F' são as pérolas negras, 'o' as brancas e 'G' a hematita)


3: Foo
5: oGooF
7: oGoFooF
10: oGoFooFooF
14: FoFooFooFooFoo
21: FooFooFooFooFooFooFoo
32: oGooFooFooFooFooFooFooFooFooFooF
47: FoFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo
47: Fo( 15 Foo)
71: oGoo( 22 Foo)F
106: oGo( 34 Foo)F
158: Fo( 52 Foo)
237: ( 79 Foo)
356: oGoo( 87 Foo)F
533: Fo(177 Foo)
800: oGoo(265 Foo)F
1199: Fo(399 Foo)
1799: oGoo(598 Foo)F
2698: oGo(898 Foo)F


Quem resolver esse problema não poderá mais desposar da fictícia e falecida Lesbiana, mas eu dou 5 reais pra quem me achar uma relação de recursão pra essas séries, e 10 pra quem achar uma fórmula algébrica fechada!... (se é que existe!)

Eu acho que deve rolar uma coisa tipo T <- (T%n==0)?T*k0:(T%n==1)?T*k1:(T%n==2)T*k2...

2008/01/07


GOTO o_chuveiro;

Um famoso debate no mundo da computação é entre aqueles que são "contra" e "a favor" da instrução GOTO. Este debate nunca fez muito sentido pra mim. A instrução GOTO é o cerne de toda a computação, mas é óbvio que é freqüentemente mais útil programar pensando em estruturas como um "for"... Só entendi a briga agora que li aquela carta do Dijkstra que dizem ter inaugurado a polêmica. Esta carta é sempre citada, mas foi raramente lida de fato, fazendo-a sofrer da mesma "síndrome do Necronomicon" que afeta por exemplo o livro Perceptrons de Minsky.

A carta de Dijkstra menciona uma preocupação que nada tem a ver com eficiência de programas, ou de capacidade de representação de linguagens. Dijkstra se preocupava com as limitações cognitivas do homem, e sua capacidade em entender naturalmente um programa de computador. Sua preocupação era com questões envolvidas na gênese da atividade de "programador de computadores", algo que acredito ter sido central em sua vida. Tem a ver ainda com a criação das linguagens de computador.

Acho muito anacrônico as pessoas continuarem esta discussão. Linguagens de computador já existem pra valer, e continuam sendo criadas. A atividade de programador já é algo definitivamente estabelecido. Precisamos considerar que estamos em um contexto diferente do de Dijkstra. É um absurdo transformar aquela questão em uma disputa entre programadores de Java, e projetistas de FPGAs.

Eu sempre simpatizei mais com a turma "a favor" do GOTO por considerar absurda a censura que se impõe sobre esta instrução que, junto da execução condicional, constitui a essência da computação. O que eu nunca havia compreendido é que aqueles que se colocam "contra" a instrução estão preocupados é com a legibilidade de códigos, e a facilidade em se gerar códigos corretos, e não com os fundamentos da teoria da computação e arquitetura de computadores.

Na verdade existem duas atividades distintas, ligadas à computação, onde ocorre um uso parcimonioso ou indiscriminado desta instrução potencialmente críptica. Aqueles preocupados com a manutenção de códigos, ou com a confecção de programas para fins específicos, devem de fato buscar padronizações como as oferecidas pela programação estruturada. Este grupo de pessoas, ao me ver, deveria se identificar com o sentimento de Knuth ao criar a linguagem WEB, e ainda propor que "programas deveriam nascer corretos, e não depurados até a exatidão". Entretanto, Knuth é tido como um opositor de Dijkstra na questão do GOTO...

Existe outro grupo de pessoas que se preocupa com o fenômeno da computação em si, e não com a confecção de programas para serem facilmente lidos por outras pessoas, ou para atender a encomendas. É nesta atividade que pode acontecer de nos depararmos com programas corretos, mas difíceis de compreender. Nestas ocasiões o programa sendo estudado é um enigma sendo resolvido, um código que se decifra. São de fato programas que desafiam as nossas capacidades cognitivas ao tentarmos entendê-los, e é de se compreender que pessoas acostumadas a trabalhar em uma das atividades estranhe os programas que ocorrem na outra.

A criação e análise de programas do primeiro tipo, os claros, naturais e fáceis, são valorizadas por profissionais de diversos tipos, que lidam com questões como manutenção de códigos e portabilidade. No caso de programas crípticos, esta programação é valorizada por um número de pessoas que suponho serem aquelas identificadas como "escovadores de bits". Acredito que o motivo da intensidade nos debates sobre a instrução GOTO se deve ao fato de que estas pessoas se sentem ofendidas pela sugestão de que esta instrução, que é a epítome da atividade desenvolvida por elas, seja considerada como inerentemente maléfica.

Acredito que este grupo de "escovadores de bits" possa ser comparado com os pesquisadores de ciências básicas, como físicos que fazem experimentos com forças básicas de interação na busca de novas formas de obter um certo efeito. Do outro lado teríamos engenheiros e técnicos na busca por dispositivos fáceis de se produzir e utilizar.

Já passou da hora de amadurecer o debate, e ver que não há o que se debater. A remoção do GOTO em linguagens de alto-nível é um fato cada vez mais fortemente estabelecido. Diria ainda que definitivamente, com a criação das instruções "try/catch"... Ou talvez falte ainda uma boa forma de se programar sinteticamente saídas alternativas de procedimentos...

***

Temos que entender que esse debate naquela época tinha a ver com programadores que queriam programar em alto-nível, e eram obrigados a fazer GOTO porque não havia alternativa. Eles queriam se libertar das amarras cognitivas do GOTO. Hoje em dia parece que existe uma tendência de programadores de alto-nível quererem amarrar os de baixo nível, exigindo que estes abandonem o GOTO. Que sentido faz isso?!? Porque as pessoas não podem ser simplesmente felizes no mundo moderno, em que pessoas como Guido van Rossum e Larry Wall podem criar suas linguagens sem o trabalho que isto exigia nos tempos de Grace Hopper?

Os tempos mudaram. Precisamos é avaliar melhor os tais limites cognitivos que interessavam a Dijkstra. Ele percebeu alguns, e lutou contra eles, e foi bem sucedido. Precisamos avançar esse trabalho, mas isto não significa de forma alguma fazer com que os escovadores de bits se ajoelhem e sejam proibidos de criar coisas como programas auto-modificáveis.

Precisamos estudar melhor ainda a forma como pessoas interpretam e escrevem programas. Precisamos entender melhor o processo, agora no novo contexto onde existem coisas como Perl e Python e Java e LISP e etc. Precisamos nos deslocar para esse novo mundo onde a existência de um número infindável de linguagens de computador diferentes existe, e esquecer, ou melhor, permitir que entre para a história o mundo de Dijkstra com seus cartões perfurados e etc.

Dijkstra não usava editor de texto, não gostava nem de máquinas de escrever. Não usava calculadora, não tinha televisão. É um sujeito que viveu um período muito específico da história em que isso era meio que normal, e manteve essa cultura até o fim da vida. Ao pensar nele me lembro um pouco de Maxwell escrevendo seu magnum opus sobre eletromagnetismo à luz de velas. Não quero dizer que ele era retrógrado, o que quero dizer é que ele subiu um degrau no desenvolvimento da humanidade, e temos agora que nos reconhecer neste nível mais alto, e pensar daqui pra cima, e não ficar pulando lá pra baixo achando que esse foi o final da história.

Em outras palavras, as pessoas agem como se o desenvolvimento posterior da evolução epitomizada por aquela carta de Dijkstra fosse o BANIMENTO do conceito de GOTO. Fosse a proibição desta palavra, fosse tornar imoral que alguém escrevesse um código desta forma. Assim surge a animosidade entre os escovadores de bits e programadores de alto-nível, algo que não faz o menor sentido.

Coisas como programas auto-modificáveis foram encontradas nos idos de 1950 e 1960, e passaram a ser cultuadas por alguns %os escovadores), e odiadas por outros, os programadores que não tinham muito tempo pra perder com isso, e a quem estas entidades crípticas atrapalhava. Hoje estes conseguiram se realizar, adquirindo linguagens que atendem a suas necessidades. Mas parece que uma forma de trauma surgiu. As tais entidades crípticas, as esfinges ou quimeras computacionais, que antes imperavam devido à inexistência de linguagens sofisticadas e à juventude da atividade de programação, estão sendo agora requeridas a se retirarem do universo, estão sendo banidas e recriminadas.

Estas estruturas são tidas como obscenas, num sentimento que lembra talvez o horror da comunidade de matemáticos frente a conceitos como os fractais e atratores caóticos %Mandelbrot denuncia este preconceito ingênuo em sua formidável obra). Este sentimento deve ser rejeitado.

***

Dijkstra fez um apelo para que as pessoas mergulhassem de cabeça no mundo da criação de linguagens de computador. A briga era com pessoas que passaram a vida programando em baixo-nível, e diziam que "passei a vida fazendo isso, porque haveria de parar"? A briga era contra pessoas que não viam que era possível se criar uma linguagem de um nível tão alto e distante dos circuitos. Era contra pessoas que possuíam uma restrição cognitiva que as impedia de ver o quão longe a idéia de linguagem de programação podia ir.

Antigamente existia apenas a programação de baixo nível, que irritava as pessoas com desejo de programar em alto-nível. Agora que ocorreu a revolução, e foi criado o mundo da computação de alto-nível, estas pessoas que o habitam parecem querer sugerir que aquele mundo arcaico deve como que ser extinto. Elas não vêem que o que houve foi uma expansão do universo da programação. Elas acreditam que antes havia algo "errado" , e que agora o erro, o "bug", deve ser exterminado.

O que havia não era errado. Era apenas pequeno demais. Agora já cresceu... A instrução GOTO e os programas auto-modificáveis ainda tem o seu lugar. A existência de alternativas que agradam mais a platéias específicas não significa que aquele outro show, que antes era o único que havia, deva acabar. Tem lugar pra todos!...

O sentimento de guerra dos anos 1960 deve ser encerrado. Temos que acabar também com essa coisa sádica na programação de falar para as pessoas o que elas não podem fazer ou o que devem fazer, ficar ditando os comportamentos dos outros. Cada um faz o que quiser. O importante é sempre divulgar todas possibilidades, em detalhes, e tentar compreender o que é mais adequado para que situação. Se um grupo de pessoas adota alguma restrição em um projeto coletivo, e a impõe através de uma hierarquia visando a melhor inter-operação das partes, bom pra eles. Não podemos ficar dentro das universidades falando em "acabar com o GOTO". Universidade é pra conhecer bem e avaliar todas possibilidades, e aconselhar sobre quando evitar ou não o tal GOTO, ou o Java, que seja...

O importante é que as tais restrições cognitivas mencionadas por Dijkstra permanecem muito pouco estudadas. O mundo da computação e programação continua sendo um bocado experimental, selvagem e confuso, em grande parte devido a um sentimento generalizado de vaidade de cada um por suas preferências. Ou talvez pelas preferencinhas do homem mais rico do mundo, e um punhado de mega-corporações.

Tem que acabar esse "contra-golpe" de programador de Java fazer careta pra GOTO e pra programa auto-modificável e o escambau, em retaliação por todos anos em que as pessoas foram obrigadas a escovar bit pra utilizar os computadores em seus serviços. Chega de trauminha, acabou a adolescência. Os programadores de "demos", vírus e outras paradas até gostam do sentimento de marginalidade, mas essa infantilidade tem que acabar, pelo menos dentro das universidades.