2009/05/06


Lista de robôs móveis

Estou estudando robótica móvel. Robôs móveis são quelas maquininhas que parecem carrinhos de controle remoto, e sempre carregam algum sensor como uma câmera ou arranjos de sonares, além de possuírem um computador que o controla e o torna minimamente autônomo, ao contrário de um mero carrinho de controle remoto.

Um dia senti necessidade de ter um bom panorama de todos robôs móveis que já foram ou estão sendo produzidos pelo mundo afora, tanto do meio acadêmico quanto por empresas. O resultado é esta lista de robôs móveis, que hoje estou mantendo no meu wiki pessoal.

Lá você encontra os famosos Khepera, Pioneer, e o popularíssimo Roomba, além do que eu estou querendo comprar, o Surveyor SRV-1.

É curioso ver os menores fabricados também, como o Monsieur da EPSON. Ele possui poucos centímetros de altura e aparece nesta foto ao lado de um filhote de totoro para comparação.



Sugestões são sempre bem-vindas.

2009/04/30


Episódipo perdido

Eu gosto de estudar histórias que tem viagem no tempo, apreciar suas peculiaridades. O Lost tem variado entre me dar medo de desandar, e acabar me agradando.

Esse episódio de hoje, quinta temporada, número 14, foi indescritível. Maravilhoso. Não tenho muito como só falar que foi bom.

Eu precisava então fazer algo, vir aqui e escrever portanto este post celebrativo. Um obelisco virtual de palavras ergo neste momento em honra deste notável episódio.

Olha, talvez merecesse ganhar um prêmio, pela maravilhosa sutileza e grandiosidade do que eles fizeram. Existe um famoso episódio de Star Trek que ganhou um Nebula, eu me pergunto se esse epiódio do Lost, The Variables não poderia ganhar. Talvez impliquem porque não é muito auto-contido, né, como é o city in the coisa of forever, mas cara... Merece muito. Eles conseguiram ver ISSO!... E fizeram! Todo mundo só pensa no contrário, só fala o contrário, só espera o contrário, eles foram lá e viraram tudo de cabeça pra baixo. E era tão simples! Como é que nunca ninguém pensa nisso?

Mudou tudo agora. A partir de hoje vai ser impossível pra mim pensar em viagem no tempo, e histórias e tramas com viagem no tempo, e não me lembrar imediatamente desse final desse episódio com um satisfeito sorriso no rosto, e mencionar "é, sim, mas não se esqueça daquele histórico episódio do Lost hein!"

Ó poetas que fizeram o Lost, Kudos a vocês, de seu humilde e admirado fã, eu.

2009/04/22


Porta aberta, ao transpor-te entrei no céu

Lá vai uma dica para todos ratos de UNIX por aí.

Estava querendo fazer um túnel para permitir a um amigo usar a minha máquina através de um firewall, mas meu cenário é um pouco diferente do normal, então tive uma certa dificuldade.

O ssh consegue criar túneis, com as opções -L e -R, mas pelo que entendi nenhuma delas me atenderia.

Meu problema é o seguinte: estou numa máquina (meu notebook) atrás de um gateway. Eu até tenho IP real aqui, mas o gateway bloqueia tudo pro lado de dentro (é um "firewall" da vida). Eles inclusive bloqueiam conexões de bittorrent e IRC aqui... Gozado que MSN skype funcionam numa boa, ainda não descobri direito porque.

O lance é que eu consigo logar lá no servidor, e executar programas que ouvem portas altas. (Pssst, não digam pra ninguém isso é segredo.) Eu queria portanto dar um jeito de abrir uma porta lá no servidor, e simplesmente redirecionar o que quer que chegue pra minha porta 80, ou 22, e assim conseguir acessar essa minha máquina dentro da "intranet" pelo lado de fora.

Depois de muito penar pra concluir que não é isso que o ssh deixa fazer, e pesquisar em alguns blogs, finalmente cheguei na fórmula ideal. E a solução usa, como não podia deixar de ser, um dos mais maravilhosos programas pra estas situações: o netcat!

Depois que funciona dá aquela raiva, porque na verdade é bem simples. O que a gente precisa fazer é rodar um nc ouvindo a porta lá no firewall, e redirecionar tanto a entrada quanto saída dele prum outro nc que vai se conectar na porta que eu quero na minha máquina.

A dificuldade é fazer esse redirecionamento de entrada _e_ de saída, e ainda acertar a ordem de execução dos processos. A solução minha foi criar um fifo, e usar um pipe. Basta rodar portanto lá no gateway/firewall:

$ mkfifo fifi

E então

$nc -l 31337 < fifi | nc 654.234.654.142 80 > fifi

onde o 31337 é a porta (alta) que você escolher ouvir, e o número críptico é o ip (obviamente inválido) da sua máquina na intranet, seguido pela porta alvo. Neste caso, porta 80, de HTTP.

Agora qualquer browser que apontar para http://www.end.do.meu.servidor:31337 vai ser atendido, indiretamente, pela minha máquina. Não é legal?

(OBS: o título do post é da música do Vicente Celestino.)

ADDENDUM: parece que usando o ssh -R não funcionou só porque falta liberar o acesso da porta por IPs estrangeiros, através de uma diretriz GatewayPorts no arquivo sshd_config.


Cultismos por via erudita, neologismos por via inculta

Mais um testemunho comportamental do contínuo experimento antropológico que é o meu dia a dia.

Ouvi um grupo de estudantes hoje comentando sobre a produção de um certo trabalho em grupo. Um estudante jogou com a maior naturalidade no meio da conversa a frase: "vocês tavam trabalhando tipo tag né, meu?"

Os outros dois estudantes, obviamente, não faziam a menor idéia do que era esta palavra que o paulista utilizou com a maior naturalidade do mundo --- uma das formas de entretenimento favoritas por aqui, sair falando palavras estranhas com toda tranquilidade.

Mas o cara explicou: "É, tag. Tipo, um tá trabalhando, aí vem o outro, e o que tava sai, aí chega o outro..."

Eu não sei onde o cara viu isso, se foi no Slashdot, algum fórum de Ubuntu, vídeo no YouTube ou no Padrinhos Mágicos, mas pra mim é quase claro que ele não tinha idéia do que estava falando. Absorveu a palavra de maneira "sintática", de trás pra frente, quase como um dos papagaios que voam pelo Museu da Casa Brasileira na Av. Faria Lima, e começou a dotá-la de significado próprio, criando um neologismo anglicista aqui no português sem a menor necessidade. Considero inaceitável.

Eu acho que tenho idéia do que ele estava falando, mas jamais vamos poder saber com certeza. Minha hipótese é que o referido tag não passa da clássica brincadeira de pega-pega

Trabalhar tipo tag significaria que cada hora um é o pegador, até que você passa pro fulano, e a partir daí "está com o fulano"...

Então uma piada bacana, que faz todo o sentido, deixou de existir porque o seu mediador não quis fazer o menor esforço em tentar entender direito o negócio. Passou por sabido por usar palavras estrangeiras, mas na verdade é um bobalhão, que não entendeu uma piada interessante, não sabe identificar num certo discurso lido que se está falando de uma brincadeira absolutamente mundana, algo fácil de se traduzir para nossa língua e cultura.

E assim a gente vai despencando pela ribanceira do analfabetismo funcional.

2009/04/17


Trem de doidos

"São Paulo é a locomotiva do Brasil." Uma enorme potência industrial e financeira que é quem bota esse país pra frente. Eles adoram sê-lo por isso, mas recentemente percebi muitas outras formas como São Paulo se encaixa tão bem na visão de uma locomotiva.

Primeiro porque se tem uma coisa que paulista gosta é de pegar um dispositivo bem potente e veloz, como uma locomotiva, e prender a ele cargas altamente inerciais, vagões e mais vagões de carvão. Eles tem aquela mania de correr pra pegar sinal fechado, é um esporte local, tem tudo a ver. Tudo a ver também são os carros esportivos que são vendidos por aqui em lojas exclusivíssimas, e que efetivamente andam pela cidade. É impressionante poder ver uma Masserati ou Porsche desfilando pelas ruas entre os graffitis desbotados e vendedores ambulantes, mas é sempre triste constatar que estes veículos passam a maior parte de seu tempo retidos em engarrafamentos, como todo mundo. A azáfama da carroceria vermelha frustrada pelo simples excesso de pessoas nas vias.

É claro que estou falando de muito mais do que os problemas de transporte. Ô gente boa de criar burocracias sem sentido pra atrapalhar sua vida, e conter o fluxo do seu rio, tornando-o um lago inerte como o Pinheiros ou Tietê.

Na verdade é inacurado falar de congestionamentos e de assoreamento enquanto eu falava de trens. A inércia causada por carga excessiva não é a mesma coisa da inércia causada por um livre caminho médio curto. De fato, se tem uma vantagem em trens é que eles não ficam presos em engarrafamentos, e passam por poucos cruzamentos e curvas. Quer dizer, isso em teoria e potencial, porque na prática os metros de Sampa ficam sim parados porque o da frente não saiu da estação ainda... É triste. Só não é menos triste do que as ocasiões em que produtos ficam retidos para entrar no porto de Santos.

Mas é verdade, trens se caracterizariam por essa possibilidade de poder correr em liberdade. E quer saber? Isso faz parte da cultura aqui em São Paulo. Eles adoram a idéia de existir um único caminho sobre o qual todas pessoas devem andar, uma única reta traçada no solo a ferro e fogo, da qual não se pode desviar um único milímetro, apenas o quanto os amortecedores permitirem. Uma única falha no caminho de ferro, qualquer desvio não-planejado que seja, implica num descarrilamento grave, é morte.

E tem os horários. É pra sair tudo na hora certinha. Eu não critico isso, quem gosta de esperar trem que não saiu ou chegou no horário?

[DIGRESSÃO DESIMPORTANTE]
Mas acho que falta um pouco de cultura de tratamento de falhas por aqui. O trem que atrasou não foi uma "vítima de algum imprevisto com que precisamos lidar", não, ele é "o trem errado que está atrapalhando". É o ponto fora da reta, outlier a ser descartado.

Eles bem gostaria de poder descartar um trem que chegou cedo ou tarde demais, é uma pena que as leis atuais proíbam isso, não permitam tratar veículos do transporte público como tratamos, por exemplo, pacotes IP.

Pra quem não sabe, uma das forças do protocolo TCP/IP, e das redes Ethernet, é essa flexibilidade que existe em podermos descartar datagramas. Qualquer pacote que começa a atrapalhar é simplesmente suicidado, e o barramento de uma rede em estrela é um bafafá onde volta e meia duas pessoas começam a falar ao mesmo tempo, e nessas horas elas precisam educadamente decidir parar de falar, para tentar de novo um tempo mais tarde (escolhido aleatoriamente). Esse problema existe devido ao fato da velocidade da luz ser baixa demais, as soluções são ou fazer isso, ou criar algum tipo de protocolo altamente "burocrático", tipo existe me redes em anel, ou em ATM...

Eu tou falando em redes, na verdade, porque ouvi na cantina outro dia um grupo de alunos conversando sobre redes. Um dos alunos expressou um enorme espanto em saber que essas redes que usamos, que parecem funcionar tão bem, pudessem ser na verdade "puro acochambramento" por baixo, essa coisa avacalhada, sem tabelas de horário, sem rotas pré-estabelecidas e sem "farol" retendo datagramas esportivos ou públicos em cruzamentos aqui e ali.

É uma pena que aqueles alunos, apesar de conhecerem redes em anel, aparentemente desconheciam detalhes de seu funcionamento, gostaria de saber se conhecendo melhor eles não se tornariam adeptos dessas outras redes mais "burocráticas"...

***

É gozado, aliás, essa relação dos paulistas com a aleatoriedade. É algo meio distante da cultura local, como mostra essa estranheza com a política estocástica da rede Ethernet. Outro dia num laboratório tentei ensinar um aluno a apresentar todas entradas possíveis a um circuito eletrônico simulado. A forma de fazer isso é agrupar os bits de entrada num barramento, e mandar o programa atribuir valores a esse barramento de forma incremental. Em outras palavras, "0, 1, 2, 3, 4...". Assim você varre todas as possibilidades.

O que os alunos costumam fazer antes de aprender isso é sair clicando meio aleatoriamente nos níveis, numa certa política estocástica para explorar um espaço que seria, na visão ainda-não-iluminada deles, amplo demais para ser exaustivamente explorado. Engraçado ver que enquanto estou dizendo que paulistas seriam certinhos demais e ignoram o mundo das aleatoriedades, justamente nessa ocasião em que eu prego a mais absoluta ordem e determinismo, eles se sintam bem fazendo o oposto.

Enfim, tentei ensinar como fazer, mas depois de explicar, o aluno continuou falando que eu tinha dado um jeito de gerar as entradas possíveis do circuito "tudo aleatório", como se meu método fosse agrupar aqueles bits e gerar a mais perfeita algazarra informacional, numa eficiência de imprevisibilidade e entropia que seria maior do que os sorteios que ele estava antes fazendo no olho e no dedo (no mouse). ele achou que dei um "boost" na aleatoriedade dele, enquanto que na verdade eu fui na direção oposta, ordenei tudo!

***

[CONCLUSÃO INTERESSANTE]
Aí eu fico pensando: Se São Paulo é a locomotiva do Brasil, o que somos nós, o resto?

Minas é bem conhecida pelas velhas "Marias-fumaça", e por ter mais estradas do que outros estados, com carros, ônibus, jipes radicais, bikes, motos, e também as velhas "jardineiras". Mas serão esses os veículos adequados para a alegoria?

Não, a figura que se contrapõe mais com a locomotiva paulistana ainda a dos retirantes nordestinos, naquele quadro do Portinari...

Eu sugiro um meio-termo entre os nômades da seca nortista, caminhando sem veículos, e as "serpentes metálicas" futuristas do sul-maravilha: é o carro-de-boi!

O carro de boi, é claro, é muito mais lento que uma locomotiva, e jamais se revelaria um método eficiente de transporte para carregar kilos e mais kilos de soja, minério e açúcar até Santos, para entregar aos estrangeiros ricos que precisam deles mais do que nós.

Mas o carro de boi tem as suas vantagens, possui até algumas características que pesquisadores tentam com muita dificuldade dar aos veículos mais modernos.

Eu trabalho com inteligência artificial e robótica móvel. Sei que tem gente por aí se descabelando tentando construir um carro inteligente, capaz de estacionar sozinho por exemplo, ou de se reabastecer de forma autônoma. Fala-se muito em seguimento de alvos também, simples como uma bolinha vermelha, ou complexos como uma pessoa. A passagem da informação de sensores métricos ativos como laser e sonar para a visão é uma ladeira que só hoje estamos terminando de galgar depois de décadas.

Gente! O carro de boi já faz isso tudo!

Tou falando sério, o boi te segue, usando informação visual, ou na pior das hipóteses seguindo a cordinha que vc amarra no nariz dele, algo que ainda nem foi pesquisado com robôs. E ele come sozinho, melhor ainda, ele come a grama que vê no caminho, ou na porta da mercearia enquanto você entrega o leite que a esposa do boi produziu de manhã e toma uma cachacinha.

A gente fica aqui "prevendo" um futuro em que vamos conviver com robôs que fazem isso aí como se já não existissem coisas similares hoje e ontem. Bom, no dia que isso acontecer não vai ser nada de novo, vai ser apenas a "reinvenção do carro de boi", não muito diferente da "reinvenção da roda" de aço ao invés de madeira.

O trem foi a reinvenção da roda, mas melhorada, claro. A roda virou de aço, enquanto que o carro de boi tem rodas de madeira. O carro de boi é barulhento pra burro, e o trem... Bem, o trem é mais barulhento ainda!

Mas agora os trens vão ficar inteligentes, vão poder andar em duas dimensões ao invés de apenas trilhos e estradas. E vão fazer um pouco menos de barulho, e vão interagir conosco realizando tarefas simples, seguindo informações visuais e comendo sozinho. É a reinvenção do carro de boi, mas melhorado, claro. É o "carro-de-boi de ferro", de silício e silicone, mas sem chifres.

2009/04/07


Rascunho da minha linguagem

Faz tempo que estou querendo inventar uma linguagem de programação. Isso aqui é um rascunho de algumas características fundamentais que ela vai ter.

Ela brota da forma como eu vejo qualquer programa: sempre apontando exatamente onde ocorrem os desvios e testes de quebra de laço... Podemos dizer que ela nasce como uma apologia ao goto! Mas não do jeito "tabu" que a instrução existe no FORTRAN e C, etc. A idéia é tornar natural escrever um "laço infinito" que possui pontos de interrupção.

Eu não gosto da forma as linguagens estruturadas fazem a gente considerar os diferentes tipos de laços como coisas muito distantes entre si, quero evidenciar as semelhanças, e como as diferenças são sutis.

E o mais importante: quantas e quantas vezes não vemos blocos do tipo "for(;;)" e "while True:" por aí? Isto não é natural. Digo, não é natural essa forma de representar isso, porque fazer esses laços é algo bem natural. Na minha linguagem o "laço infinito" será algo natural.

Um único goto no fim de um bloco pega mal porque não existe aquela sintaxe bonita marcando o ponto pra onde esse goto aponta... Eu não quaro ter "gotos selvagens", eu quero ter blocos sim.

Quero algo assim:

[
print x++
break if x>10
]

O que está dentro desses colchetes é um laço "infinito", "incondicional"... Se você não botar esse "break", não vai ter fim, e pronto.

Aquilo é um "do..while". Um "while.. do" é obtido simplesmente colocando esse teste no início...

[
break if x>10
print x++
]

Agora, podemos fazer coisas intermediárias tb.

[
x=x+y
break if x>10
y+=1
print y
]

Não sei dar agora um bom exemplo de quando isso é útil, mas já aconteceu mais de uma vez na minha vida deu ver laços com pedaços de programa repetido pra cima ou pra baixo dele, só porque o ponto de quebra do laço não podia ser no meio do bloco. Mas nessa minha linguagem isso pode acontecer naturalmente.

Em C dá pra programar assim, mas os "for(;;)" pra todo lado ficariam feio pra burro não?...

É muito comum também ver programas por aí com blocos que possuem "múltiplas terminações"... Um goto que aponta pra terminar a função de um jeito ou de outro. Isso economiza o trabalho de escrever uma funçãozinha adhoc. Quero achar um jeito bom de escrever isso tb...

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

...