quinta-feira, 30 de abril de 2015

Hoje, 30/4, 20h, eu vou fazer um hangout de constraint programming. A idéia é que me deu vontade de escrever um solver genérico baseado em constraint programming, e já que eu vou fazer do zero, dá para fazer com mais gente assistindo. Se quiser participar, eu vou postar o link aqui.

Se quiser conhecer o assunto antes, wikipedia:

http://en.wikipedia.org/wiki/Constraint_programming

Ainda não escolhi a linguagem mas é C++ ou Go, tendendo mais a C++.

sexta-feira, 24 de abril de 2015

Que triste, eu olhei para a imagem abaixo e o primeiro pensamento que veio na cabeça foi "o que o Bolsonaro está fazendo ali?"


Eu estava querendo relaxar para ir dormir, aí resolvi ler o Knuth porque não tem nada que me acalme mais que ler o Knuth. Mas eu li um mindfuck tão grande que nem sei se consigo dormir hoje.
O SAT é NP-Completo né? Para testar se uma fórmula é satisfiable, você vai precisar de muito, muito esforço computacional, possivelmente exponencial se P != NP.
MAS, e aí vem o mindfuck, e se você testar entradas aleatórias até uma delas resolver a fórmula? A gente pode calcular quantas entradas você precisa, na média, para chegar a um resultado.
E a média é 2 (dois).
Gente, dois. Na média, com dois testes você acha o resultado.
Absolutamente nenhum problema útil da vida prática você consegue resolver com 2 testes aleatórios, e ainda assim a média é dois. Significa que a grande parte, a maior parte do universo dos problemas são os problemas inúteis. As coisas que interessam são um cisco minúsculo no mundão dos problemas possíveis. Não sei se eu fico feliz ou triste com essa conclusão.
Todo mundo falando bem dos gráficos do joguinho novo do Star Wars, mas eu terminei recentemente um jogo que era o oposto, A Dark Room:
É todo em texto, parece uma mistura de Candy Box com Civilization. Cuidado: VICIA, mas pelo menos acaba rápido, dá para terminar com algumas horas de jogo.
Semana passada eu encontrei o Martin Fowler e peguei um autógrafo no meu Refactoring. Esse é o melhor livro que você nunca quer usar, ele ensina todos os truques para transformar código legado feioso em código refatorado bonito. 


quinta-feira, 9 de abril de 2015

Mês passado eu adaptei o Aleste 2 para rodar em cartucho ao invés de disco (a versão em disco era muito ruim, você precisava ficar trocando de disquete no meio do jogo, e tinha pausas enormes de carregamento). Mas eu não tinha conseguido rodar no meu MSX turboR porque aqui no brasil ninguém fabrica cartuchos de msx com a capacidade que eu precisava.

Então eu comprei de um cara na frança. Chegou em duas semanas, rapidinho. Mas eu achei que ele ia me mandar um cartucho, e ele mandou um kit para fazer eu mesmo haha. Agora bora soldar o bichinho, pelo menos a parte difícil que era o smd ele já mandou pronta.

Se alguém quiser o meu port do aleste 2 para rom, o fonte está no github:

https://github.com/ricbit/aleste2



quarta-feira, 8 de abril de 2015

Hoje nasceu a filha do meu irmão, eu tenho três sobrinhos agora. Naturalmente, a primeira coisa que me passou pela cabeça ao saber do nascimento foi escrever uma simulação em python.
Meu irmão tem 50% dos meus genes, o primeiro filho tinha 25%. A segunda também tem 25%, mas não são os mesmos 25%, na média metade é repetido, então somando os dois filhos ele espalhou 37.5% do meus genes. Colocar na conta o outro irmão deixa as correlações complicadas, então eu escrevi uma simulação para ver o total:
Se eu não errei nada, somando os três sobrinhos tem 53% de ricbit vivendo por aí, já é mais do que se eu tivesse um filho! (Se eu tivesse um filho seria só 51.5%).


sábado, 28 de março de 2015

Quando eu estou programando, gosto de desenhar um grafo com a dependência entre as classes, assim fica fácil de ver quem está acoplado demais, ou quem tem responsabilidades em excesso. Mas quando o projeto começa a crescer, o grafo fica zoneado como esse aí da figura.


O jeito de conseguir ler isso é pegar as classes mais externas e extrair a árvore que começa nelas. Mas como fazer isso? Meu primeiro instinto foi abrir o python e começar a escrever um parser de .dot e um dfs, mas aí eu pensei que seria melhor fazer direto em bash mesmo:
for i in `cat graph.dot | gvpr -i "N[indegree==0]{print($)}"`; do dijkstra -d -a $i graph.dot | gvpr -i "N[dist<50.0]" | dot -Tpng -o $i.png; done; convert -append *png graph.png
Esse one liner bobo recorta todas as árvores do grafo e remonta numa imagem muito mais legível que a original:
E antes que perguntem: sim, Boolean depende de Context Emoticon smile
Pausa para o pedido pessoal.
Vocês conhecem o Lauro De Luna Larsen né? Ele é figurinha nos eventos de quadrinhos. A foto de background no meu perfil do facebook, onde estou eu, o George Perez e uma porta autografada, foi a esposa dele que tirou. Recentemente ele criou a Editora MINO que está publicando quadrinhos nacionais de qualidade.
Esse post não é sobre ele, é sobre a irmã dele. Domingo passado a casa dela pegou fogo e ela perdeu TUDO. A coisa foi tão feia que ela perdeu até a casa em si, vai ter que demolir para construir do zero de novo. Agora eles estão fazendo uma vaquinha para reconstruir a vida:
Qualquer pouquinho que você contribuir já ajuda, e se você compartilhar a informação, os pouquinhos de todos os seus amigos somados ajudam mais ainda!


domingo, 22 de março de 2015

Hoje o professor Pierluigi Piazzi faleceu. É até difícil falar o quanto ele me influenciou, então eu vou contar uma das historinhas preferidas dele, a história da montanha.
Certa vez dois engenheiros foram contratados para demolir uma montanha. Vendo que era uma tarefa muito difícil, o primeiro engenheiro fundou a Montanhabrás, que produzia uma centena de tratores por dia, todos usados para acabar com a montanha.
Já o segundo engenheiro fez um trator só. Mas esse trator usava o material escavado da montanha para criar um outro trator igualzinho a ele. No segundo dia eram dois tratores, no terceiro dia eram quatro tratores. Em duas semanas ele já tinha mais tratores que a Montanhabrás, graças ao poder da progressão geométrica.
Era isso que o prof. Pier fazia. Ele criava máquinas auto-replicantes. Não contente em ensinar, ele ensinava a ensinar, de modo que um aluno replicava o conhecimento adiante em progressão geométrica.
Se você olhar com cuidado, os posts no meu blog seguem o estilo de post que o Pier fazia. São textos feitos para o leitor inteligente, escritos com bom humor e acompanhados por desenhos ilustrativos. Eu sou um tratorzinho, e espero que os meus leitores virem tratorzinhos também.
A primeira vez que eu o vi foi em um encontro da Frota Estelar Brasileira. (e que coincidência ele morrer no mesmo mês em que o Spock morreu). Na foto abaixo nós dois aparecemos, foi tirada em um encontro de MSX. Ele sempre deixava comentários no blog, a última vez que falei com ele foi falando de nossa paixão em comum por réguas de cálculo. Vamos todos sentir falta dele.


domingo, 15 de março de 2015

Lucas Uyezu me recomendou um site divertido, o coding game:
O objetivo é escrever pequenas AIs para joguinhos. O que eu estou fazendo agora é um solver para o lunar lander. Ele te dá x,y, dx, dy da sonda lunar a cada iteração, e você precisa dar o thrust e o ângulo para pousar em repouso. Bem divertido!


O google code foi deprecated, agora é recomendação é migrar os projetos para o github. Eu movi agora os três que eu tinha por lá:
gibit - search engine para gibis
https://github.com/ricbit/gibit
spojtweet - achievements para spoj
https://github.com/ricbit/spojtweet
ricbot - AI para jogar Go, escrita em Go
https://github.com/ricbit/ricbot
O gibit só eu uso, e o ricbot era uma prova de conceito. Mas o spojtweet tem bastante usuários, e a parte bacana é que a maioria é de indianos :)




segunda-feira, 9 de março de 2015

Eu ajudei a fazer o Nerdologia da semana passada, sobre a cor do vestido lendário.
Para mim o problema todo não é sobre física e nem sobre biologia, é que ninguém ensina para as pessoas o que é uma cor. A cor não é uma propriedade de um objeto, a cor é uma sensação.
Se você falar para um esquimó tomar banho a 25 C ele vai falar que tem a sensação de banho quente, e se você falar para um angolano tomar banho a 25 C, ele vai falar que tem a sensação de banho frio. E se eles trocarem de país por um ano, depois desse período a sensação do banho vai inverter também.
Por isso não tem como falar da "cor do vestido". Vestido não tem cor. Vestido tem refletância, que pode ser não-isotrópica, que é influenciada pela luz incidente, que chega no sistema nervoso humano, que varia de indivíduo por indivíduo. Se no fim ele acha que viu azul, então a cor do vestido para ele, naquele momento, é azul.


sexta-feira, 6 de março de 2015

Das melhores coisas que você pode fazer: dar notas para filmes no Netflix. Quando você dá notas, o algoritmo do Netflix aprende do que você gosta, e começa a sugerir pérolas que você nem sabia que existiam.
Por exemplo, ontem ele me sugeriu Os 13 Assassinos, um filme japonês de 2010 que eu nunca tinha ouvido falar. Resolvi assistir no escuro e valeu a pena!
A história se passa no finzinho do shogunato Tokugawa. Essa já era uma era de paz, onde os samurais ainda existiam, mas na prática não faziam nada, a ponto de ter samurai de meia idade que nunca matou ninguém.
Isso tudo é bom e bacana até que um dos sucessores do trono ganha poder político, e por acaso esse sucessor é mais malvadão que o Joffrey. Uns poucos sensatos resolvem assassinar o malvadão antes que ele tome posse, mas pra isso eles precisam achar algum samurai que ainda entenda do riscado. No fim tudo que conseguem é um grupo de 13 samurais, que vão lutar contra mais de 200 que protegem o vilão.
E aí vem a batalha. Mas não é a lutinha asséptica e digital de Star Wars, nem a dancinha voadora do wushu. Essa luta é SUJÊRA, com sangue, lama, dedo no olho, e cabeça voando. Coisa linda de assistir, e que deve ser bem próxima do que deveria ser uma batalha histórica.
O filme também tem tanukis. Ou não, vai saber.


segunda-feira, 23 de fevereiro de 2015

No fim de semana nós fomos lá na Liberdade comemorar o ano novo chinês, foi divertido, apesar da quantidade de gente.
Mas não dá para ir na Liberdade sem passar na Fonomag, dessa vez eu trouxe uma biografia do Newton que promete explicar, afinal de contas, por que é que a maçã cai.
É da coleção Hinotori de biografias de pessoas pouco conhecidas do público japonês. Além do Newton também tinha à venda o Lincoln, o Marco Polo e o Cristo.


Eu acho tão legal programar usando o hierarchyviewer do android, é como se eu estivesse programando um dos computadores do Jurassic Park. No cinema todos os programadores usam caixinhas na tela.


Eu sempre achei estranho que HDs são vendidos em decimal ao invés de binário. Quando o fabricante fala que o HD tem x Mb, ele não quer dizer 1048576*x bytes, mas sim 1000000*x bytes. Como o sistema operacional reporta em binário, era relativamente comum encontrar gente reclamando que o HD é menor do que deveria ser.
MAS
E se na verdade o HD sempre é em binário, e o resto que falta é o espaço que a NSA reserva para guardar seus dados pessoais que foram minerados e vão ser mandados para análise? Isso explica tudo!!!1

quinta-feira, 19 de fevereiro de 2015

Ontem eu assisti Back to the Future 3. Eu lembro que na época o povo não curtia muito, mas eu sempre gostei do filme.
Revendo ontem, eu notei que a Clara foi muito esperta na hora de seduzir o Doc Brown. Ela usou um truque que nunca falha: a técnica do telescópio quebrado. Você quer seduzir um cientista? Fala que você tem um telescópio quebrado e gostaria muito que alguém o consertasse.
Eu sei que isso funciona porque funcionou comigo haha. Uma das primeiras coisas que a Ila Fox me pediu foi para consertar o telescópio dela. Olha só a foto da época com a plumagem completa. :)


Acho que eu tinha 16 anos quando consegui dados suficientes para entender essa piada.


Eu já sabia que a maior parte do Game of Thrones é baseada em eventos da vida real (tipo a Guerra das Rosas). Mas eu não conhecia qual era o evento que inspirou a batalha do Red Viper com o Montanha!
Eu estava lá no quora à toa lendo sobre batalhas medievais e li essa descrição de um trial by combat real que aconteceu em 1386. Olha só como é igual! Esse foi o último trial by combat na França, depois dele mudaram a lei.
"While describing the exceptionally rare circumstance of a judicial duel, the accounts of the fight between Jacques le Gris and Jean de Carrouges are particularly telling of what symmetrical combat was like between two well-armored knights. The two knights tilted at each other, hitting one another three times and remaining stunned, but still on their horses. On the third strike, the lances shattered (one account says a large splinter lacerated one's thigh, and he made the mistake of pulling it out), so the two regained their balance then started hacking away at each other with battle axes ("becs de corbin"). This wasn't going anywhere until le Gris severed Carrouges' horse's spine with the axe, forcing the latter to dismount. Carrouges was being severely overpowered by the younger le gris, ultimately resorting to knocking le Gris off his horse by stabbing it in the gut. The two fought with swords on foot and eventually, the stronger fighter--le Gris--stabbed Carrouges through the thigh. At this point, le Gris backed up to gather energy to finish the job, but before doing so Carrouges jumped forward and knocked him to the ground. The two wrestled until le Gris was firmly pinned down, at which point Carrouges started furiously hacking at le Gris's head with the sword. Le Gris wouldn't give up and Carrouges couldn't find any weak points for a clean stab, so he cut away at the armor lacing until he was able to pry open access to le Gris's face. (Imagine opening a can of sardines with a hatchet.) Carrouges demanded a final confession for the crime (the rape of Carrouges' wife) and le Gris refused, so Carrouges took his dagger and shoved it through the newly-widened gap in the visor, fatally stabbing le Gris in the face."