sexta-feira, 28 de março de 2014

Qual é a parte do Superman que voa?
Eu estava lendo uma entrevista do Byrne numa das revistas que chegaram, e ele discute a física do Superman, em especial sobre qual parte dele que voa. A teoria do Byrne é que é o peito do Superman que voa, e leva os membros juntos. Por isso que o Superman pode voar com as pernas dobradas.
Em contraste, tem outros heróis que voam com os pés, como o Namor e o Iron Man. Esses personagens precisam voar com as pernas retas. O Thor voa com o martelo, então o martelo precisa estar sempre na direção do movimento.


quarta-feira, 26 de março de 2014

A Luvinha acabou de dar um pulo duplo! Já é o segundo que eu vejo ao vivo!

Ela estava brincando com os outros gatos, aí deu um pulo, mas no meio do caminho percebeu que ia cair em cima do Rabisco. Para desviar, ela deu um pulo duplo e caiu mais pra frente.

(As leis da física não proíbem a existência do pulo duplo quando o corpo é deformável. A trajetória do centro de massa é fixa, mas tudo que está em volta pode mudar de lugar.)

(Pulo duplo não é wall-jumping, isso tem todo dia em casa, mas só o Rabisco consegue.)

segunda-feira, 24 de março de 2014

Chegou hoje um pacotinho da TwoMorrows (editora especializada em biografias e entrevistas com quadrinistas). Dessa vez peguei uma edição especial dos X-Men (com foco nas fases do Cockrum e do Byrne), uma edição do Warlock, uma do Walter Simonson, um especial do Bob McLeod focando em arte-final, e uma edição especial "heróis mortos" que fala do Capitão Marvel, Elektra, Robin, Flash e tem uma mega-entrevista de 15 páginas com o Jim Starlin.

Na entrevista ele faz uma revelação bombástica que é ao mesmo tempo óbvia e não-óbvia. Ele finalmente confirma que o Thanos *foi* chupinhado de um personagem do Quarto Mundo. Mas não é aquele que você está pensando!

Dica: se você for comprar da TwoMorrows, não tenha pressa, porque demora mesmo. Eu comprei no Natal e chegou só hoje.


terça-feira, 18 de março de 2014

Nos primeiros vôos do Projeto Mercury, a NASA ainda não sabia muito bem o que iria acontecer com os astronautas no espaço. Por isso, eles eram muito bem monitorados!
Dentro da roupa do astronauta, os batimentos cardíacos eram medidos por eletrodos no peito, a pressão sanguínea era medida por uma braçadeira, e a temperatura era medida por um termômetro no cu.

segunda-feira, 10 de março de 2014

Em 2001 eu fui ao Theatro Municipal de SP assistir ao vivo Also sprach Zarathustra, do Strauss. A data era propícia, todo mundo conhece o primeiro movimento dessa sinfonia porque ele foi usado como tema do filme 2001: a space odyssey.

Mas o que me surpreendeu não foi o primeiro movimento, foram os seguintes. Eu nunca tinha ouvido o resto da sinfonia, e tudo que me vinha à mente era "pombas, estou ouvindo a trilha sonora do Superman"!

De fato, o John Williams nunca começa uma trilha sonora do zero, ele sempre pega alguma obra clássica que encaixa tematicamente e usa como starting point. Zarathustra é baseado no livro homônimo do Nietzsche que fala sobre o übermensch, então tematicamente tem tudo a ver com Superman.

O mesmo acontece com Star Wars. Se você fosse escolher uma obra clássica como ponto de partida, qual você escolheria? Os Planetas, do Holst né? Cada movimento da obra é sobre um dos planetas, e o John Williams se baseou na melodia de Marte. Afinal, Marte é o deus da guerra, então tematicamente tem tudo a ver com Star Wars.

Pode conferir:

http://www.youtube.com/watch?v=L0bcRCCg01I

Os primeiros vinte segundos são a Marcha Imperial. Em 1:10 é o tema do Luke. Mas pra mim a parte mais similar o finalzinho. Avança até 6:55 para ouvir o final da música, e depois vai nesse video aqui, que é a destruição da Death Star. Em 3:20, é a praticamente a mesma música!

http://www.youtube.com/watch?v=DOFgFAcGHQc

Quando criança eu não notava nada disso, mas eu imagino que essas ligações deveriam ser óbvias para quem entende de música erudita. 

E se alguém souber qual é a inspiração do tema do Jurassic Park, me avisa porque esse eu nunca descobri 
Povo fala que você não pode revisitar as coisas que você assistia quando criança, mas eu gosto, porque eu deixo de ver como consumidor e vejo como criador.

Por exemplo, hoje eu vi um episódio de Jiraiya. Quando eu era criança, tinha uma música da trilha sonora que eu achava bizarra, que era essa aqui (começa em 00:20):

http://www.youtube.com/watch?v=Yg3wT57RJnU&list=PLszyJ9jJYLMu3CNRETmRzZx7HNACLR2rr#t=24

Em princípio era para ser o tema dos corvos-ninja assassinos, mas não fazia sentido para mim. Por que colocaram um música de circo como tema de um ninja assassino?

A resposta é simples, eu era criança e ignorante, não tinha entendido a proposta do compositor! A música que eu achava que parecia de circo, na verdade era inspirada nessa aqui -> http://goo.gl/4Tq4CO

Quando você entende o contexto, tudo faz sentido!

(Isso também se aplica a 90% das trilhas do john williams, prestando atenção dá pra ouvir direitinho de onde ele tirou a inspiração de cada uma).

sábado, 8 de março de 2014

No shopping Boulevard em BH tem um arcade da Dona Barata! Apesar de ter projetado esse arcade, eu nunca tinha visto um de perto!


Por volta de 2003, o que estava bombando era o DDR. Nessa época, tinha um fábrica nacional era que especializada em importar placa de street fighter e montar o gabinete por aqui, e eles queriam entrar na onda no DDR também. Então eles foram até a USP perguntar se alguém por lá saberia projetar um clone. Acabou que o projeto caiu na mão da minha equipe, e o plano era fazer um DDR-light para crianças, você tinha que pisar em baratinhas que acendiam no chão.

Eu fiquei com dois pedaços do projeto: a lógica do jogo e o subsistema de som. Cada um tem uma anedota :)

Para a lógica do jogo, nós escolhemos uma variante do 8051 que tem tudo num chip só: cpu, ram, rom e i/o. O código eu fiz todo no assemblão mesmo, mas a dificuldade era: como testar? Não tinha emulador, então o único jeito de testar era gravando a eprom do chip e plugando na placa.

Mas que desperdício né? Queimar um chip a cada teste! Foi aí que a gente teve uma idéia muito boa. Internamente, a eprom tem todos os bits setados em 1, o processo de queimar o código nela deixa os bits 1 como estavam, e queima os bits 0 de maneira permanente. Mas o jogo inteiro era pouco menos de 1kb, e a eprom interna era maior que isso (32kb se minha memória não falha).

A solução foi olhar na tabela de opcodes do 8051 e notar que o NOP codifica como 00! Então quando eu queria testar o código, era só preencher 1kb de NOPs na frente do código, assim eu podia reutilizar o mesmo chip. A única diferença é que demorava alguns microsegundos a mais no boot para percorrer todos os NOPs no começo até chegar no código. Com isso conseguíamos usar o mesmo chip 32 vezes :)

O subsistema de som foi divertido também. Para o som rodar em paralelo com o 8051, decidimos fazer um chip dedicado só pra isso (eu implementei o chip em vhdl e na placa ele era uma fpga). O problema era a rom, para ficar barato eu tinha que enfiar a trilha sonora inteira dentro de 1MB, então tinha que rolar uma compressão bonita.

Depois de quebrar a cabeça um pouco, eu consegui bolar um algoritmo para comprimir a música. Eu levei o sample pro gerente ouvir, e o diálogo foi mais ou menos assim:

- Ficou muito boa a qualidade, Ricbit! Que método você usou?
- ADPCM de 5 bits.
- Não, peraí. Eu sou engenheiro de áudio faz anos, eu SEI que não dá para fazer essa qualidade com 5 bits. Pode falar a verdade, qual método você usou?
- ADPCM de 5 bits.

E realmente era ADPCM de 5 bits! Mas eu usei um truque. :)

O DAC na saída era uma rede R2R de 12 bits, mas eu usava só 5 bits por vez. A cada 10ms eu media a potência na saída, e escolhia só os 5 bits mais altos desse trechinho de audio. Isso introduz ruído de quantização, mas na prática o ouvido humano faz mascaramento, então você não ouve esse ruído. É o mesmo método de compressão com perdas que o mp3 usa, só que de um jeito mais fácil de implementar em hardware.

No fim nós entregamos o projeto pronto e eu nunca cheguei a ver como ficou montado, hoje foi a primeira vez. E ainda tive a oportunidade de ver uma menina de 8 anos brincando no arcade, então eu sei o jogo deve ter ficado divertido :)

sexta-feira, 7 de março de 2014

Começou nessa semana a segunda turma de Discrete Optimization no Coursera. Eu normalmente já recomendaria, mas dessa vez é especial porque eu ajudei a fazer esse curso!

https://www.coursera.org/course/optimization

Background: Ano passado teve a primeira turma do curso, eu me inscrevi e foi excelente. O formato é diferente dos tradicionais videos-com-quiz: o curso é formado de seis exercícios NP-completos, sua tarefa é resolvê-los em 9 semanas. Os seis problemas são: knapsack, graph coloring, traveling salesman, facility location e vehicle routing, ou seja, só pedreira.

Cada problema tem seis instâncias, você precisa escrever um script que roda localmente na sua casa e submeter só a solução. Para o algoritmo, vale tudo, você escolhe a linguagem e a abordagem que quer usar. Os videos do curso são tutoriais das abordagens possíveis, todos eles são liberados no day-one e você assiste na ordem que quiser. Eu me diverti um monte no ano passado, e acabei terminando o curso com distinction.

Pois bem, depois de acabar o curso, o professor mandou um email para todos que terminaram com distinction perguntando quem tinha alguma idéia para melhorar o curso, e eu tinha uma idéia muito prática.

Programar simulated annealing é mole, qualquer um faz. Mas alguns dos algoritmos propostos são mais difíceis. Para o MIP, por exemplo, precisaria de um curso inteiro para aprender a fazer do zero. Por isso, a recomendação é procurar uma lib pronta por aí e focar no modelo ao invés da implementação. Mas as libs prontas são muito difíceis de usar, com apis horrorosas! E mesmo que um aluno aprenda a usar a api, o conhecimento não passa para os outros, porque o code of conduct não permite compartilhar código entre os alunos.

Então a minha sugestão foi: (1) escrever uma lib mais fácil de usar, e (2) fazer um sétimo exercício open source, que não vale pontos e é feito justamente para os alunos trocarem entre si o conhecimento aprendido. O professor gostou da idéia, e essa turma já está usando esse modelo!

A lib eu mesmo fiz: o EasySCIP, que é um binding em cima do SCIP. Até escrevi um post no ano passado sobre ela:

http://blog.ricbit.com/2013/12/mande-mais-dinheiro-usando-mip.html

O professor criou o sétimo exercício, que é weighted set cover. O curso tem um github oficial, e a idéia é os alunos forkarem e colocarem seus códigos no fork. Assim qualquer um pode entrar na lista de forks e aprender com as soluções dos colegas:

https://github.com/discreteoptimization/setcover

Recomendo demais esse curso, aprendi um monte com ele.
Eu ia fazer um comentário, mas nem precisa.

Matemática Discreta com Patos.

http://www.amazon.com/Discrete-Mathematics-Ducks-Sarah-Marie-Belcastro/dp/1466504994
Esse app parece interessante. A idéia deles é que o quando você está lendo, seu cérebro está fazendo duas tarefas distintas: uma é identificar a palavra, e outra é movimentar o olho até a próxima palavra. 

Ao invés disso, a alternativa do app é mostrar uma palavra por vez, no mesmo lugar, eliminando completamente o movimento do olho. Para isso funcionar, tem que ser com uma fonte especial (arial-like), e um alinhamento especial das palavras na horizontal, que varia de palavra por palavra. Além disso, eles variam o tempo de exposição por palavra, e quando a palavra é muito comprida eles quebram em pedaços de uma forma inteligente.

No site tem um gif animado, eu consegui ler 500 wpm de boa. Eles dizem que com treino dá pra chegar a 1000 wpm. Se isso funcionar mesmo finalmente eu vou ler mais rápido que o Lucas Radaelli 

http://www.33rdsquare.com/2014/03/app-set-to-dramatically-increase-your.html