2009/03/19


A velha escola

Estou estudando um assunto que envolce uma mutitude de algoritmos, todos meio parecidos entre si. Faz algum tempo que já estava sabendo que eles eram relacionados com o famoso algoritmo de Metropolis-Hastings, mas hoje descobri que existe outro algoritmo ainda que envolve tudo isso... É o famoso recozimento simulado.

Sou um grande fã de recozimento simulado, que só vim a conhecer em meu mestrado, e sempre que lhe descubro uma aplicação fico muito feliz. Imaginem meu espanto hoje ao finalmente entender então que toda essa multitude de algoritmos são na verdades variações em torno deste grande obelisco algorítmico. Fiquei meio pasmo.

Conversei com um great old one sobre isso, sobre se não poderíamos pegar alguns desses problemas e simplemente enfrentar de cara, de baixo pra cima, como uma otimização através de recozimento simulado. A resposta, que tenho certeza que seria compartilhada por muitos professores e ainda mais por alunos, foi mais ou menos assim: "poisé, é mesmo, só que se vc escrever isso não vão comprar sua idéia, vc não vai publicar artigo nem ganhar dinheiro da fapesp. Tem que inventar outro nome aí, dar uma disfarçada."

É tipo isso. Muita coisa que tamos vendo por aí são um recozimento simulado forjado! É, não pude resistir à piada... Não é linda a iron-ia disso tudo? AHAAHHAHA!!!!

***

Acontece que recozimento simulado é old school.E a ciência anda cada dia mais na direção de ser dominada por sofistas, que se especializam mais nas políticas e retóricas vazias de "fazer seu nome" do que na coisa de fato. E ser old school pega mal.

Mas querem saber? Old school is the only school. Não quero papo furado, dêem-me a coisa original, a coisa verdadeira.

Malditos simulacros de descoberta!...

Mas eu pensei nisso, que só a old school é a verdadera school, foi ouvindo o disco novo do Metallica (pirateado) no meu player, que consertei essa semana com meu ferrinho de solda. Estava muito emocionado no ônibus ouvindo aquilo, em parte porque enquanto apreciava a música, os sons, os timbres, me chamou a atenção como que apesar de todos efeitos e produção, dá pra ouvir alguns barulhos na música que são considerados meio que "ruídos indesejáveis", meio que coisas que "não deveriam fazer parte" do som. É o barulho da palhetada, barulho da corda deslizando no traste, essas coisas. Como guitarrista e como estudioso da guitarra em meu mestrado, ouvir isso me faz pensar muito.

Uma coisa que eu pensei foi "eu troco toda uma discografia do DJ Tiesto por quaisquer 10 segundos de solinho de guitarra desse disco, essa coisa feita por músicos de verdade." (Não me levem a mal, não é discriminação contra música eletronica. Tou falando daquele processo de ensaiar, tocar, compor... O próprio Metallica andou afastado disso até esse último disco.)

E bateu aquele saudosismo... Lembrei de uma vez que conversei com um menino que disse que ouvia "new metal", e não tinha idéia do que fosse o "metal" desqualificado, não conhecia nada de Black Sabbath, Led Zeppelin ou um Iron Maiden que fosse. Outro dia ainda me espantei também com uns jovens com quem ando falando, que não assistiram ao último filme do Tarantino... Tipo, como assim!?! Não sabia que existia gente hoje em dia, especialmente jovens, que estivessem se importando pouco com o Tarantino!... Eu sempre falo que uma das coisas que marcou o início do que considero "os anos 90", foi o Pulp Fiction. Vai ver que isso agora marca o fim dos anos 90, o mesmo diretor não ter mais apelo aos jovens, a quem tem a idade que eu tinha na época...

É meio triste pensar que o que te importa não é mais mainstream. Mas sempre há conforto em saber que doido mesmo era o old school. Sempre é bom ouvir aquela celebridade dizendo "bom mesmo é Jimmy Reed", "Arthur Big Boy Cudrup"... O old school permanece vivo em quem realmente importa, a ciência de verdade ainda existe pra quem realmente tem noção das coisas, naquelas raras conversas reservadas, francas, onde o alívio de um "ah bom" salva meses de trabalho incerto.

E foi nesse momento no ônibus, indo pra universidade, ouvindo ao som daquele dispositivo computacional fajuto demais comparado à importancia que o sinal por ele gerado tem pra mim, que reparei na camiseta de um garotinho de uns 8 anos de idade que estava no banco à minha frente. Era preta, do Megadeath.

História verídica!... Causo acontecido, de fato, com este que vos fala.

2009/02/16


Bernoulli Warcraft

A um tempo atrás escrevi sobre sorteios de Benoulli. Agora me deparei com um exemplo muito interessante de como esse tipo de variável aleatória pode influir em nossas vidas.

Em algumas aventuras no World of Warcraft você precisa coletar um certo número de itens para cumprir um objetivo. Esses itens "caem" de NPCs que você mata, são os famosos drops pra completar as quests. Só que muitos destes drops são estocásticos, existem probabilidades devc conseguir pilhá-los dos cadáveres de suas vitimas.

Por exemplo, na aventura Beer Basted Boar Ribs você precisa pegar 8 costelas de Javali. Acontece que elas aparecem quando você matas os javalis apenas com uma probabilidade de uns 44%. Então você começa a matar, mata mais de 8 javalis, e não completou, vê o drop rate, se conforma, mata mais 8, e continua sem completar a missão... Então você se pergunta "afinal de contas quantos javalis será que eu tenho que matar pra conseguir??"

A resposta dessa pergunta requer que modelemos tudo como um processo estocástico. Esse número de javalis que serão mortos antes de obtermos nossa meta é modelado pela chamada distribuição binomial negativa. O gráfico a seguir (feito com o pylab) mostra a probabilidade de termos que matar N javalis para terminar a referida quest.



Como podemos ver, é quase impossível matar só 8 javalis e conseguir pegar as 8 costelas necessárias. A chance de você matar 17 e conseguir as 8, que pode parecer natural dado o "drop rate" de pouco menos de meio, não é tão grande assim, é quase 50%. Se você quiser ter certeza que vai conseguir obter essas 8 costelas (por exemplo, se você quisesse sair matando pra só depois vir atrás e procurar entre os mortos), vc ia ter que matar lá uns 25 javalis.

2009/02/04


Criancice

Homenagem a meu irmão, cunhada e sobrinho, essa música (que não consegui botar no blip.fm) tem mais de uma coisa a ver comeste post.


Yes I am a child...of ugly times, Oh yea, my people have committed some ugly crimes, and in the process of me breaking free, I have inherited a painful legacy.

I have even created some ugly children for you to adopt, That you have chosen to embrace, You embrace the ugly, the dying freak, Only because he is a part of you and you are afraid to speak.

Deep down, way down, in the depths of you, He is ready to take over and rape the last drops of insanity in your mind, Let him out, let him out, let him run wild and scream free, Get crazy and forget about music, what it was, what it is, Or what it is supposed to be.

Give in to the dirty, give in to the funky, Give in to the gypsy, give in to the nigger in your soul, Fly free, fly free, and then we will see something beautiful...

OH LORD,- YES I'M A NEW BORN CHILD... OH YEA,- A BEAUTIFUL NEW-BORN CHILD,-

Newborn Child -- Eric Burdon and War 1971

2009/02/03


World of Warcraft no Linux, com controle dualshock

Ontem finalmente consegui pela primeira ver jogar World of Warcraft, e minha conclusão depois dos primeiros momentos foi: andei desperdiçando minha vida sem estar jogando até hoje!

Quando meu irmão começou a jogar, duvidei que jamais pudesse rodar no Linux, de tão legal que imaginei que seria o jogo. Só que andei descobrindo recentemente que o wine já tá rodando muito bem esses jogos 3d estribados. Nessas férias fiz um esforço pra jogar o Battlefield pelo wine, e fui muito bem recompensado. Após esta experiência positiva, fui procurar saber e descobri que o WoW é até mesmo considerado um dos jogos que roda melhor pelo wine!

Instalei então o wine 1.1.11 pelo apt, e fui no site da Blizzard. Baixei o tal instalador, que me mandou liberar 15GB de espaço. Liberei, e então começou o download... Mandei botar logo o novo Wrath of the Lich King. O DL foi OK, mas infelizmente deu um problema no final da instalação. Procurei na Internet, e descobri que vãrias pessoas já tiveram esse problema, incluindo usuários de windows, o que me deixou mais esperançoso. Mandei então instalar o WoW básico, e aí funcionou. O donwload foi perfeito, limitado mais pela minha rede e HD do que qualquer coisa.

Mandei abrir o jogo, e aí começou o tal update, que é obrigatório. Aí tive um problema... O programa de fazer o update tava muito lento, até tava baixando, mas ocupando muito minha CPU sem fazer nada. Pesquisei na Internet de novo, e vi mais pessoas reclamando desse programa, muita sugerindo inclusive fazer o tal download alternativo do programa de fazer o update. Procurei pelos mirrors aqui e aqui, e eventualmente achei um servidor rápido o bastante (mais de 100kB/s). Rodei o programa do primeiro patch, de 3.0.1 pra 3.0.2, e depois desse o updater começou a funcionar direito, então todos outros updates fiz através dele. A partir daí entrei loguei e já comecei a jogar!

O jogo funciona muito bem, muito rápido. Deve ser o jogo com a melhor relação bonito/rápido que joguei na vida.

Agora vem a parte mais legal de todas. Como jogo num notebook, no escuro, é muito difícil ver as teclas no teclado, e usar o touchpad. Fiquei logo com vontade de tentar jogar usando meu "joystick", ou "gamepad", ou controle dualshock. aí descobri de novo na Rede que o WoW não suporta joystick nativamente!... Ainda li que tem uma empresa aí vendendo um programinha pra deixar você ligar seu controle de xbox no computador e jogar...

O que eu fiz? Simplesmente instalei o fantaśtico driver "joystick" do X, que deixa vc usar o controle como mouse ou teclado, associando do jeito que quiser!!... Já estou no fine-tuning. Aqui vai a minha configuração atual:


...
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
InputDevice "joy0" "SendCoreEvents"
...

Section "InputDevice"
Identifier "joy0"
Driver "joystick"
Option "Device" "/dev/input/js0"
Option "MapButton1" "key=0x0031"
Option "MapButton2" "key=0x0032"
Option "MapButton3" "key=0x0033"
Option "MapButton4" "key=0x0034"
Option "MapButton5" "button=1"
Option "MapButton6" "key=Control_L"
Option "MapButton7" "key=space"
Option "MapButton8" "button=3"
Option "MapButton9" "key=0x0079"
Option "MapButton10" "key=0x0063"
Option "MapButton11" "key=0x0036"
Option "MapButton12" "button=3"

Option "MapAxis1" "mode=accelerated keyhigh=Right keylow=Left"
Option "MapAxis2" "mode=accelerated keyhigh=Down keylow=Up"
Option "MapAxis3" "mode=none"
Option "MapAxis4" "mode=relative axis=x"
Option "MapAxis5" "mode=relative axis=y"
Option "MapAxis6" "mode=accelerated axis=x"
Option "MapAxis7" "mode=accelerated axis=y"

EndSection

...

2009/01/29


Minha aura reparadora

Eu tenho tipo uma aura mágica, um campo de força místico que se manifesta às vezes quando eu chego perto de alguém que está mechendo com algo que não está funcionando. Quando eu chego, ou quando eu mecho na coisa, aí funciona. É incrível. Eu quero até fazer uma história um dia em que tem um santo engenheiro que quando entra na sala todos programas compilam, e todos cubos de rubick saltam nas mesas, resolvendo-se.

Meu computador começou a dar vários problemas recentemente. Minha aura não é tão forte assim... Cooler fazendo barulho, bateria morreu, e o pior de tudo: um terrível mal-contato no teclado, afetando as teclas esc, janelinha, F7, backspace, g, h e ~/^. O mais chato de tudo é que foi bem quando comecei a usar a "janelinha" com o awesome (meu novo gerenciador de janelas), e o esc eu uso muito no emacs.

Convivendo com o problema, comecei a suspeitar de algum mal contato em algum único fiozinho do teclado (teclados funciona com pares de fios que fazem contato...) Mas não abri pra resolver eu mesmo porque é meio difícil abrir notebook. Acabei levando num lugar e pedi pra dar uma revisão, limpar e ver se eles arrumavam o teclado.

O cara da oficina aceitou, já me fazendo um discurso aterrador sobre a possibilidade do teclado ter se desgastado a ponto das teclas não estarem fazendo o contato, o que seria irreparável, e me mandou me preparar pra gastar 300 reais num teclado novo. Ainda me ofereceu uma bateria nova, outros 300 conto.

Paguei 90 reais pro cara fazer uma limpeza e tentar resolver o teclado. Melhorou sim, mas ficou "quase bom", ainda tava dando o mal-contato de vez em quando... É de deixar puto, pagar essa grana, a máquina melhorar, mas não ficar perfeita. Não sei se prefiro isso ao serviço simplesmente não ter sido feito.

Hoje, depois de muito trabalho em achar uma chave de fenda que prestasse --- no Savassi só se acham sex-shops, finalmente abri a máquina e resolvi olhar eu mesmo como andava a conexão do teclado.

Abri, desconectei o cabinho, passei a ponta da chave de fenda pra tirar a ferrugem, coloquei de novo, e fiz uma descoberta importante: uma peça que prende o cabo está soltando do lugar, talvez seja preciso prender com algo. (cola quente? :) )

Montei de novo, e agora está funcionando 100%, nenhuma "engasgada" do teclado ainda... Porque funciona comigo e não com o técnico? Claro que deve ser pura sorte, mágica. Nada de material, qualificável ou compreensível. Nada mundano, certamente.

PS: Não mencionei algo crucial. A máquina voltou com o teclado mal-encaixado. O teclado é tipo uma bandeija de metal, e uma das pontas ficou pra fora do friso de plástico que emoldura ele. Quando remontei, botei no lugar certo. É a marca do serviço mal-feito, o cara remontar tudo "pros cocos". Será que não sou eu o abençoado, mas sim os outros que são amaldiçoados, e tudo que montam fica ainda meio capenga? :)

2009/01/16


Barbas de molho

Relatório de férias. Hoje fui passear na minha saudosa Avenida Paraná. Fui na AMJ comprar umas tralhas eletrônicas, sonhar com meus projetos: fazer o TK85 sem fio, fazer um joystick, e agora mais outro: montar um amplificador com um TDA7169ASA.

Aí fui atrás do que estava mesmo procurando: um aparador de barbas. Eu queria especificamente um daqueles que tem em barbeiro que é só o aparador "linear" (tipo máquina de cabelo), pretinho, quadrado, com uma tomadinha pra ligar na parede e recarregar. Procurei por toda a cidade e não vi nenhum desses, só máquinas caras.

Procurando o shopping oi acabei caindo no shopping Xavante. Primeira vez que fui lá, achei bem legal, tem bastante coisa. Tipo um mercado central do novo século. Não só lá como todo o centro ali em volta tá bem legal, do jeito que a gente gostaria que fosse desde uns vinte anos atrás.

Lá no fundão do galpão achei uma única lojinha vendendo um aparelho parecido com o que eu quaria, com a diferença que tinha um bercinho pra recarregar. Custava 65, o que achei um pouco caro. Queria pagar com cartão e o cara me falou pra procurar outra loja dele lá no uai shopping, que lá tinha cartão.

Fui no tal uai shopping, que é o mais novo desses três (Oiapoque, Xavante e o Uai). Aqule parece mesmo um shopping, e tipo pra zelite!... Achei a tal loja, e lá tinha dois modelos de barbeador como eu queria: um phillips de 80 conto, e um Powerpack BR-390 de $35. Perfeito!! Finalmente achei. Hoje vou cortar a barba pela primeira vez desde o ano passado. Viva Taiwan.

2009/01/06


Tirando poeira da velha maquininha (ou: brincando com meu TK85)

Estou de férias na casa dos meus pais. Revendo aqui minhas raízes... Entre elas, revi o primeiro micro que jamais usei (acho que era o segundo que meus pais já tiveram), um TK85.

TK85 era o "genérico" brasileiro do britanico Sinclair ZX81. Uma maquininha baseada no Zilog Z80, com uma ROM com um interpretador de BASIC. Tem uma saída pra TV (P&B), entrada prum tal joystick gambiarrado, e portas de áudio pra usar um toca-fitas (K7) pra carregar e gravar "arquivos".

Antigamente as coisas eram feitas pra durar, né. Com o carregamento de arquivos é via áudio, dá pra simplesmente usar a placa de som pra substituir o toca-fitas!... Se fosse baseado em RS-232 ou porta paralela, nem tinha jeito de fazer nada. Mas com a placa de som dá pra entrar na Internet num computador "normal", converter o arquivo pra um arquivo de som, e carregar os programas no TK85.

Pra gerar o arquivo de áudio eu usei o tal p2raw que vem nesse pacote aqui: http://www.xs4all.nl/~odemar/zx81/zxtools.zip

Arrumei depois uma coleçao de joguinhos e programas por aí também, tem coisa tipo biorrítimo, e programa de adivinhar um bicho que voce pensar fazendo perguntas, essas coisas, todos "clássicos"...

Enfim, aqui tem uma foto minha jogando tetris no TK85, ligado numa TV modernosa. Esse jogo nao é "da época", foi feito recentemente pelo autor desse emulador.



É isto aí, diversao de férias da melhor espécie!... Eu vou tentar agora fazer um joystick pra mim. Outra idéia é ligar umas baterias no TK85 e deixar ele "sem fio".

2008/12/14


Ratos ou homens?

Me interesso muito por interfaces, projetos de ferramentas e com entender como a mente humana funciona (ciência cognitiva).

Hoje, enquanto completamos aí os 40 anos do tal mouse, que todos amam e idolatram, enquanto procurava informações sobre uma tal linguagem de programação Forth, que é parecida com algo que eu estou inventando --- Aliás, sempre fico meio feliz e meio triste quando estou inventando algo e descubro que já existe. Feliz porque já existe, e triste porque não é famoso/importante o bastante pra eu já conehcer --- Neste momento venho finalmente conhecer não só o Forth, mas um tal computador chamado Canon Cat, criado por um tal Jef Raskin que aparentemente e infelizmente não recebe nem um décimo da atenção de Douglas Engelbart ou Ted Nelson (o que já é pouco). Eu até gosto dos dois, mas essas idéias do Raskin, que foi um dos criadores do Macintosh, tão me deixando com uma impressão muito boa!...

O tal livro dele, The Humane Interface, parece bem interessante.

Infelizmente, o sujeito morreu em 2000. RIP...

2008/12/09


Exemplo de laço complicado

Eu sou um defensor da instrução GOTO, acho que as pessoas devem pelo menos aprender como funciona quando tão na escola. Já escrevi muito por aqui a respeito do GOTO, e do preconceito sem noção, etc.

Tudo bem que dá pra resolver qualquer problema com os for e whiles da vida, e os breaks e continues auxiliam, mas não deixa de ficar feio né gente... Não sei se fica menos feio do que usar um GOTO.

Olha esse exemplo aqui de código real que tem um laço complicado. Achei interessante porque vem direto de uma documentação de uma biblioteca, é um programa bem básico, é muito pequeno, e tem um laço bizarro.




lexer = lex.lex()
lexer.input(sometext)
while 1:
tok = lexer.token()
if not tok: break
print tok

Olha só, o sujeito teve que fazer um laço “infinito”, algo sempre chamativo. Aí tem uma atribuição, um teste com break, e um print. O problema é que não dá pra testar o tok de cara, porque é preciso a primeira atribuição. nao dá pra fazer do ... while também porque o print precisa ficar depois do teste. Não tem jeito. O teste teve que ficar no meio desses dois. Aí então faz um “laço infinito com break no meio”. Uma estrutura que não tem nome. Se fosse GOTO, seria simplesmente mais um “laço com um teste”... Pra entender esse programa eu uso mais meus conhecimentos de programação fudamental, sabedora do GOTO, do que as facilidades estruturantes oferecidas pelas estruturas whiles e fors da vida.

Claro que dá pra fazer um jeito do programa ficar mais bonito, e o verdadeiro teste que limita o laço ficar na declaração do while. Tipo:




lexer = lex.lex()
lexer.input(sometext)
tok = lexer.token()
while tok:
print tok
tok = lexer.token()

Deve até poder ficar melhor com for. Mas algo levou esse programador a optar por uma única linha de atribuição, e um break, achou que talvez isso fosse mais claro, mais simples, mais de acordo com as famosas “limitações de suas habilidades cognitivas” que preocupavam Dijkstra. Eu pergunto: Será que estamos satisfeitos com nossas linguagens?...


Listinha de presentes

É sempre bom manter atualizada uma listinha de presentes que eu gostaria de ganhar, pra se alguém resolver assim, de repente, comprar alguma coisa pra mim. É uma ferramenta importante de auto-conhecimento também, fazer uma lsitinha dessas, que não é muito diferente de escrever uma carta pro Papai Noel não é mesmo?...

Aí vai então:

  • Livros da Amazon ou Livraria Cultura, tenho wishlists enormes lá que atualizo de quando em vez.
  • Chaverinho de 10 reais do multi-coisas, com uma tirinha de couro e clipe pra prender no cinto e aro grande.
  • Camiseta do Sepultura (a velha, de verdade, preta, com o S vermelho)

Por enquanto só essa miséria, um dia ponho mais coisa...