Entries from dezembro 2008 ↓

Tux Droid

Feliz natal!

Catequizando a família :-)

"Antes de começar o trabalho de mudar o mundo, dê três voltas dentro de sua casa."

Como funciona um emulador?

Sempre achei muito interessante a idéia de emular jogos antigos, de video-games da minha infância, acho que todo mundo que joga e programa também acha, e, com as aulas de Arquitetura de Computadores que venho tendo na faculdade, o interesse voltou. Pesquisando sobre o assunto, descobri que criar um emulador de um console dos mais antigos não é nada de outro mundo, como sempre imaginei, então resolvi tentar. Aproveitando o embalo, pretendo escrever uma série de artigos explicando passo a passo como criar um emulador de Chip-8, que é um dos mais simples que você pode criar.

Certo, mas o que é um emulador mesmo?

É um programa que simula o funcionamento de algum sistema. Nele vão existir partes que simulam uma CPU, a memória, os periféricos de entrada, o vídeo. Enfim, todo o hardware que se deseja simular. Além do sistema, você precisará de uma ROM, que é uma cópia exata do conteúdo do cartucho do video-game. É nela que está o jogo.

E como eu faço isso?

Primeiro, você precisa conhecer muito bem o sistema que quer emular. Depois você precisa identificar e interpretar todos os comandos do sistema, os opcodes (operation codes). Por exemplo, um comum a diversas máquinas é:

ADD x,n

que significa:

x = x + n

.
Então, onde você encontrar esse opcode, deve executar este comando. Fazendo isso com todos, você terminará com um emulador completo. Simples, não?

No próximo post vou falar sobre o Chip-8.

Miro – Internet TV livre e gratuita

Há alguns dias conheci o Miro, que é tipo um agregador RSS mas, ao invés de notícias textuais, ele agrega vídeos. O funcionamento é simples: i) você assina a um feed RSS especial com os links e descrições dos vídeos; ii) o Miro lê o feed e fica esperando por novas entradas; iii) quando aparece um novo, ele automaticamente começa a baixar por BitTorrent; iv) quando termina, te avisa e você pode assistir os vídeos no próprio programa e, caso hajam vários, um seguido do outro, numa playlist, como a programação de um canal de TV.

Existem milhares de canais para ele. Neste momento, 5.707, e qualquer um pode criar outros. National Geographic, Discovery Channel e Terra são apenas algumas das empresas que já estão participando. No Miro Guide dá para ter uma idéia da quantidade de material disponível.

Nesse vídeo dá para ver melhor como funciona o programa.

Para instalar no Ubuntu basta digitar em um shell:

sudo aptitude install miro

Infelizmente encontrei alguns bugs usando o Miro nesses dias. O pior foi que, caso você tente assistir a algum vídeo com o Miro deste pacote, ele vai fechar (o famigerado Segmentation Fault). Para resolver este problema, basta abrir como root os arquivos /usr/share/applications/miro.desktop e /usr/share/app-install/desktop/miro.desktop e modificar onde há:

Exec=miro %F

para:

Exec=miro –xine-driver=opengl %F

Depois de instalado, só escolher algums canais que te interessem no Miro Guide e assistir os vídeos. Recomendo assinar a todos os feeds do TED Talks, que são palestras excepcionais sobre vários assuntos.

Blog de cara nova

Já era hora, com mais de dois anos (bem parados, por sinal) de blog, de dar um visual novo a ele. Como aproximadamente 99,98% dos programadores, meu talento para cores, usabilidade e design tende a zero. Então, aproveitando que existem milhares de designs (gratuitos) para o WordPress, fui atrás de um para chamar de meu.

Não demorou muito. Na verdade, só tive que olhar os temas mais populares e já o quinto lugar me agradou. Dei mais uma olhada para ver se não aparecia algum melhor, mas não encontrei. Então só foi uma questão de baixar, instalar, traduzir e configurá-lo. Gostava do outro tema mas acho que este ficou melhor.

Ano novo, tema novo.

The Matrix runs on Windows

TTYShare

Sempre quis aprender a jogar NetHack direitinho. Como faço quase tudo no shell, seria interessante ter um jogo na boa e velha tela preta. Então, pensando sobre isso nesses dias, tive uma idéia: e se existisse um site onde você pudesse jogar NetHack pelo browser? Gostei e comecei a pensar “É, eu posso fazer usando um applet Java. Mas eu não gosto de Java. Ah! Posso tentar usar o JRuby! Massa. Existe um servidor de NetHack que você só precisa se conectar a ele por telnet e já joga, também deve existir um pacote pra Java que se conecte por telnet, tem tudo pra Java. É, deve ser simples de fazer. Legal, vamos começar.”

Fui para o notebook e pesquisei um pouco sobre o assunto antes, então encontrei o TTYShare, que é tipo um Youtube do shell. Existe um programa, o ttyrec, que salva o que você faz no console. Então você envia para o site e ele cria o vídeo como os do Youtube. Além disso, eles também tem a função de você jogar NetHack pelo browser. “Droga! Fizeram melhor do que tinha pensado…”

Para enviar um vídeo é bem simples, basta instalar o ttyrec, no Ubuntu/Debian simplesmente faça:

sudo aptitude install ttyrec

Depois abra um shell e execute:

stty columns 80 rows 24
ttyrec -e nethack

O terminal deve ter o tamanho 80×24 se não dá problema com o TTYShare. Troque o nethack por o programa que você quer rodar. Pronto, ele vai estar salvo em ~/ttyrecord (/home/seu-usuário/ttyrecord), só enviar para o site e pronto. Se quiser ver como ficou o vídeo, ttyplay ~/ttyrecord.

Um exemplo de um jogador de NetHack só para ver como é o resultado.

Erro com o system-tools-backends no Ubuntu 8.10

Há algumas semanas que sempre que instalo/removo/atualizo algum pacote usando o aptitude dá o erro:

Erros foram encontrados durante o processamento de:
system-tools-backends
E: Sub-process /usr/bin/dpkg returned an error code (1)
A instalação de um pacote falhou. Tentando recuperar:
Configurando system-tools-backends (2.6.0-1ubuntu1.1) …
* Starting System Tools Backends system-tools-backends invoke-rc.d: initscript system-tools-backends, action “start” failed.
dpkg: erro processando system-tools-backends (–configure):
sub-processo post-installation script retornou estado de saída de erro 1
Erros foram encontrados durante o processamento de:
system-tools-backends

Como não encontrei nenhum problema além dessa chateação, não tentei resolver. Mas hoje abusei e fui atrás da solução, que é muito simples. Na verdade é só um workaround(leia gambiarra), mas funciona. Simplesmente vá no shell e digite:

sudo invoke-rc.d system-tools-backends stop
sudo dpkg –configure -a

Resolvido.

SIM/Smart Cards no Linux

Há algumas semanas, no IV Natal Java Day, assisti a excelente palestra “Java e a próxima geração de smart cards” do Igor Medeiros e me impressionei. Já tinha ouvido falar que os smartcards eram computadores completos mas nem dei muita bola, até que, com ele falando isso, me toquei do quão impressionante era. Sabe aquela parte metálica dourada de um chip GSM, ou no cartão do banco? Pois é, AQUILO é um computador, com CPU, memória e tudo mais.

Fiquei encucado e resolvi comprar um leitor para brincar um pouco. Procurando pelo São Google, encontrei um na loja da Brando que me interessou:

iMONO 43 in 1 + Sim + Smart Card Reader

iMONO 43 in 1 + Sim + Smart Card Reader

43 cartões, além de ler SIM e Smart Card (que eu saiba, a única diferença é no formato (um SIM acho que todo mundo conhece (o chip de celular), e o Smart Card é um cartão como de banco)) por US$ 19 com frete grátis. O dólar subiu bastante nos últimos meses mas, mesmo assim, é tentador. Comprei. Umas 3 semanas depois, chega o pacote vindo de Hong Kong, sem imposto, custando pouco mais de R$ 42, ótimo!

Conectei ele no notebook e coloquei o chip do meu celular para testar (esqueci do pequeno detalhe que teria que comprar um smart card), nada… procurando no Google, encontrei diversos sites ensinando mas nenhum falando do meu leitor. Então entrei na lista do MUSCLE (Movement for the Use of Smart Cards in a Linux Environment) e enviei um e-mail perguntando. Poucas horas depois, o próprio cara que fez a maioria dos softwares/drivers de smart cards pra linux, Ludovic Rousseau, me respondeu.

A solução foi extremamente simples. Pelos logs que passei, ele chutou (e acertou) que meu leitor era compatível com o USB CCID (Chip/Smart Card Interface Devices) e me pediu que fosse nesse site e seguisse as instruções para pegar mais informações dele. Fui e, no final, eu só precisaria compilar o driver libccid que baixei neste site e modificar o arquivo ccid/readers/supported_readers.txt adicionando a linha 0x0BDA:0×0169:iMONO no final. Resolvido.

Para testar, segui as instruções desta página para instalar o MonoSIM, um leitor simples da agenda de SIM cards, e tudo ocorreu sem problemas. No final, o Ludovic adicionou o meu leitor na página dele como “Should work but untested by me”, uma pequena contribuição para quem comprar o mesmo leitor :-)

Agora, comprar um smart card em branco e ver o que consigo fazer.