Blog do Eduardo Costa Meu blog pessoal

30Abr/110

Otimização de cubos

Cá estou eu trabalhando em um pequeno teste envolvendo cubos e OpenGL ES. Gerei alguns números impressionantes e gostaria de compartilhar.

Bem, quem manja de OpenGL sabe que glVertex com GL_TRIANGLES é o pior jeito de gerar objetos 3D (embora seja o mais simples). Usar Vertex Buffer Objects, glDrawElements e GL_TRIANGLE_STRIP é algo bem melhor. Entretanto, faria muito noob se borrar nas calças e dizer que Direct3D é melhor se as pessoas aprendessem primeiro pelo jeito mais otimizado.

Vamos aos números. Em um cubo, temos 6 faces, correto? Cada face é representável com dois triângulos e cada um com três vértices. Dá um total de 36 (6x3x2) pontos ou "chamadas ao glVertex". Para definir cada ponto, temos 3 posições (X, Y, Z), mais uma coordenada constante extra para shaders (W) , mais duas coordenadas de textura (U, V). Se todas forem "float", são 6 dados de 4 bytes, ou seja, 24 bytes por ponto. No total, o cubo tem 864 bytes (36x24).

Como melhorar isso? Em primeiro lugar, usando shorts no lugar de floats para XYZW. Cada ponto fica com 16 bytes (4 shorts de 2 bytes mais 2 floats de 4 bytes). Já reduzimos o tamanho do cubo para 574 bytes (36x24). Melhorou, mas não está bom.

Usando triangle strips, reduzimos a quantidade de vértices. Em virtude das texturas que estou aplicando (uma em cima, uma para os lados e uma para baixo), posso fazer um "strip" para os lados, "casar" com a parte de cima e "pular" para a parte de baixo. Não sei descrever melhor, mas isso me permite descrever o cubo com apenas 22 pontos. Reduz para 352 bytes (16x22). Calma que ainda vem mais!

Com VBOs, ainda mantendo o padrão das texturas, descobre-se que esses 22 pontos tem muito "repeteco", gerando apenas 15 pontos únicos. Isso são 240 bytes (16x15), mas falta o buffer de índices. Criando esse IBO, temos os 22 pontos representados como minúsculos shorts. São mais 44 bytes (22x2). No total, temos 284 bytes (44+240)!

Ou seja, nesse caminho todo, o computador precisava movimentar e processar 864 bytes (quase 1k) por cubo. Otimizando, caiu para 284! Isso representa uma economia de quase 68%! E, nesse caso, também representa uma otimização de processamento, VBOs reduzem as cópias entre memória de CPU e memória de GPU.

A parte legal é que fica tudo intuitivo depois que você entende o porquê.

26Abr/110

Transformando YouTube (FLC) em iMovie (MP4)

Se você procurar na Internet, vai geralmente encontrar links underground, muitos softwares pagos, quantidades vastas de malware, mas nada realmente prático para transformar FLC em MP4. Tentando achar uma solução "Mac", encontrei uma que pode funcionar também no Windows ou Linux.

Historinha: usando o iDVD do Mac, pensei em converter alguns vídeos de dança do ventre para um DVD para minha esposa. Primeiro problema: como baixar os vídeos do YouTube?

No Firefox, tem muito plugin para isso. No Safari, tem um jeito bem malicioso e sem plugins. Basta abrir o vídeo no YouTube, abrir a tela de "Activity" (menu Window), procurar o vídeo desejado na lista - basta procurar o único arquivo com mais de 1MB, selecionar o ditocujo, pressionar Cmd-C, abrir a tela de "Downloads" (menu Window novamente) e fazer Cmd-V. Pronto! O download do vídeo começa.

Existem duas possibilidades a partir daí. O vídeo já está em MP4 e basta abrir no QuickTime, no iMovie ou no iDVD, ou está em FLV. Se estiver em FLV, o problema começa. Mais uma lista infindável de ferramentas underground se você procurar no Google.

Recomendo duas soluções sensacionais: você pode instalar o Perian, um conjunto de codecs opensource para Mac, e/ou você pode instalar o VLC, um sensacional player também opensource que só não faz café.

Essa segunda opção vale para Windows e Linux, pois o VLC é muitiplataforma. Aliás, um parêntese: esse VideoLAN está muito bem integrado ao Mac. Nem parece software vindo de outra plataforma.

Com o Perian, qualquer software Apple que visualiza filmes (QuickTime, iDVD, etc) passa a reconhecer FLV e mais alguns formatos. Entretanto, o iMovie não (por ser uma plataforma de edição).

Com o VLC, você consegue ver os FLVs sem problema algum, com um pequeno extra: você pode usar a exportação dele para gerar um MP4. Ah, mas, ao contrário de outros encoders que fazem um trabalho pesado de conversão, o VLC tem a opção de fazer a cópia dos streams de audio e video do FLV para MP4 direto (uma vez que o codec é compatível). Basta ir em "File > Stream/Transcoding Wizard > Transcode/Save to file", selecionar o(s) arquivo(s), não marcar nada em "transcoding" (esse é o truque para uma cópia rápida), selecionar o formato MP4 e o diretório destino. Em instantes, o vídeo está pronto. Com esse MP4, basta usar em qualquer software Apple. Não testei no iPod, mas deveria funcionar também.

Categorias: geek Sem Comentários
26Abr/112

Primeiro post sobre o Minecraft

Estou viciado no jogo Minecraft. Ele é ótimo para relaxar, me dá várias idéias diferentes, além de estimular meu raciocínio a depender do que estou tentando fazer. Como tem muita coisa que acho útil para outras pessoas, aliado ao fato que não tenho paciência para publicar vídeos no YouTube, vou deixando alguns tópicos por aqui.

O primeiro é batido: um tutorial sobre como sobreviver nesse jogo. Quando o joguei pela primeira vez, pensei que era algo bobinho, do tipo que você fica boiando à deriva. Infelizmente, eu me enganei. Levei um tempo absurdo para não fazer nada, anoiteceu, ficou impossível ver qualquer coisa, e, do nada, aparece um bicho estranho que explode em cima de mim. Bate aquela sensação de dinheiro jogado fora...

Tempos depois, achei este vídeo aqui:

Para quem não tem interesse em ouvir a narrativa em inglês, vai a síntese da idéia. Nesse jogo, ao iniciar, você começa em um mundo aberto, totalmente quadradão, alguns porcos e vacas quadradões pulando aleatoriamente, o sol quadrado se movendo junto às nuvens quadradas no alto... Lindo e quadradosamente maravilhoso. Sua missão, no primeiro dia, é sobreviver com o que tem e criar um abrigo antes que anoiteça. Quando o sol der lugar à lua, os monstros aparecem e você dança.

Primeira tarefa é achar uma árvore. Chegando perto dela, mira no tronco, clica com o botão esquerdo e segura até que o bloco da árvore se quebre e vire um bloquinho menor, que você pode pegar. Faça o mesmo com uns três blocos da árvore e já estamos no caminho.

Depois de depenar todos os blocos de uma árvore, as folhas começam a sumir. Algumas deixam cair uns galhos (sapling) que você pode pegar. Para manter essa operação sustentável, recomendo replantar os galhos, que depois tornarão-se árvores (que você pode depenar e pegar novos galhos e etc). Basta selecionar o galho (provavelmente foi para o segundo quadradinho na barra inferior - se assim o foi, pressione "2" e o galho vai para a "mão" do personagem), escolher um lugar de terra (marrom) ou grama (verde) no chão e clicar com o botão direito. Pronto! Desenvolvimento sustentável!

Agora, vamos fazer o crafting. Entre no inventário (geralmente a tecla "E"). Aparece seu bonequinho quadrático, do lado esquerdo vai ter a armadura (não hoje, ainda), do lado direito tem a parte onde você monta suas coisas, no meio o inventário e, no fim, os espaços que você pode colocar os itens e acessar com as teclas "1" a "9" (provavelmente tem madeira - Wood - no "1").

Vamos fazer tábuas ("wooden planks"). Clique na madeira e depois na área 2x2 (não importa onde). As tábuas aparecem do lado direito (cada bloco de madeira gera 4 placas). Clique nas tábuas (uma vez para cada bloco de madeira que tiver) e depois no inventário. Pronto! Você acabou de bancar o marceneiro!

A diversão ainda não acabou. Clique nas tábuas com o botão esquerdo e, na área 2x2, clique com o botão direito uma vez em cada quadrado para deixar uma tábua em cada um. Aparece a "mesa de trabalho" (crafting table) do lado direito. Esse é um dos itens mais importantes do jogo! Clique nele e ponha em um dos quadrados de uso (vamos dizer que você pôs no quadrado da tecla "2").

Saia do inventário (tecla "esc" ou "e"). Em qualquer lugar plano, selecione a mesa ("2") e clique com o botão direito no chão. Mesa instalada! Hora de fazer algo mais complexo. Clique com o botão direito na mesa. Aparece o inventário, mas com uma área de craft maior (3x3).

Pegue mais duas tábuas e ponha uma no meio e uma embaixo. Isso gera quatro bastões ("sticks"). Pegue os bastões, coloque no meio e embaixo. Coloque uma tábua em cada quadrado do topo, fazendo uma espécie de "T". Aparece uma picareta de madeira! Bem vindo ao irreal mundo de Minecraft.

Pegue a picareta e ponha em seu acesso rápido. Saia do inventário e clique com o botão esquerdo no Crafting Table até ele virar um bloquinho para você voltar a carregar consigo. Agora vamos à exploração. Esta parte tem que ser rápida, ou você vai passar a noite no escuro. Procure por blocos de pedra (são cinzas). Entre estes, você precisa procurar alguns que possuem manchas pretas no meio. Esses são minérios de carvão (coal ore). Ao achar um, use sua picareta para quebrar-lo. Basta clicar com o esquerdo e segurar até ele se espatifar e deixar uma pedrinha preta, que você deve pegar. Isso é carvão (coal). Geralmente esses blocos de carvão aparecem em grupos de dois a doze. Pegue alguns e vamos à parte final (por hoje).

Se você foi rápido, e ficou dando pausas entre as explicações, deve estar na metade do dia ainda (sol a pino). Ache um local legal para iniciar uma mini-casa. Não cometa o erro de entrar em uma caverna criada pelo gerador de mapas agora. Elas podem ser muito complexas e vão lhe dar uma dor-de-cabeça grande agora, além de poderem surgir monstros (aggressive mobs).

Esse local para sua casinha pode seguir duas formas: ou você pega um terreno plano e põe todos os blocos da parede e teto, ou você vai na parede de uma montanha e escava uma mini-caverna para você. Recomendo a segunda nesse início. Depois você pode abandonar e criar uma casa mais legal.

Basta fazer o que você fez com o carvão, mas, dessa vez, abrindo um buraco mais "aconchegante". O que você pode fazer é abrir um buraco 4x4x2 e tampar a entrada com os blocos que você escavou. Dica: ao invés de fechar toda a parede 4x2 que você abriu, deixe um bloco para servir como "janela". Dica 2: quando anoitecer, não fique colado na janela, ou um Creeper aparece, explode e leva sua parede inteira. Dica 3: não faça a janela com mais de um bloco vazado, pois aranhas podem atravessar e te lascar.

Falta somente um acessório para terminar sua casa Flintstone. Com um bastão (stick) e um carvão, você pode criar tochas (torches). Basta colocar um bastão abaixo de um carvão para criar quatro tochas. Com a tocha selecionada, clique com o direito em uma parede ou no chão para colocar a tocha lá e iluminar parte do ambiente.

Agora, se anoiteceu, você pode colocar o Crafting Table em sua "casa" e brincar com outras receitas. Como você vai perceber, a picareta de madeira não vai durar muito se você começar a expandir sua casa. Na receita da picareta, troque as tábuas de cima por paralelepípedos (cobblestone) e você tem uma picareta de pedra (urgh), que dura mais e quebra um pouco mais rápido.

Com isso, você sobreviveu ao primeiro dia nesse jogo. Basicamente, sua rotina será diurna, até você expandir seus negócios e começar a "dominar" outros tipos de áreas (mais sobre isso no futuro).

Vamos a algumas receitas úteis para melhorar sua casa:

Com seis tábuas (wooden planks), em um formato 2x3, você faz uma porta. Coloque-a no chão e fica mais fácil entrar e sair de casa agora.

Com oito paralelepípedos (cobblestone), dispostos em todo o 3x3, exceto no meio, você faz uma fornalha (furnace). Com ela, você pode fazer outros tipos de itens.

Se você pegou areia (sand) - os blocos bege, você pode usar a fornalha (clicando com o direito nela, que nem o Crafting Table), colocar os blocos de areia no quadrado de cima e o carvão em baixo. A fornalha vai queimar e a areia vira vidro (adorei essa parte). Com o vidro, você pode fazer janelas maiores, pois você vai ter uma ótima visão e os monstros não vão te encher. Só tome cuidado pois a criação do vidro consome muito combustível. Você poderá precisar do carvão para tochas. Se você tiver madeira em sobra (sem transformar-la em tábuas), pode usar como combustível no lugar do carvão, mas o fogo da madeira dura bem menos.

Com vidro e porta, você já tem uma casa bem funcional. Se fizer o mesmo padrão da fornalha, mas usar tábuas no lugar da pedra, você tem uma caixa (chest), que pode ser usada para guardar itens, que nem seu inventário. Se colocar duas caixas uma ao lado da outra no chão, elas viram uma caixa maior, com mais espaço. Se a caixa for desmontada (ou destruída), os itens nela se espalham.

A partir daí, é com você. Estabeleça um objetivo (construir uma casa melhor, explorar o mundo, etc) e divirta-se.

Ah, a propósito, as proporções nesse jogo são planetárias. Nessas novas versões, o tamanho do mapa tem o equivalente ao tamanho da Terra, então, literalmente, seus netos conseguiriam chegar ao fim dele. As cavernas naturais são, muitas vezes, complexas - já me perdi em várias. Ou seja, tem muita coisa para fazer.

Última dica (meio tardia): crie sua primeira casa perto de onde você surgiu. Se você morrer, volta para esse ponto - vai ser bom ter uma casa por perto. Depois, com o tempo, você pode pegar lã (wool) dando um golpe em uma ovelha para tosquear-la. Com três blocos de lã em linha e três tábuas abaixo, você faz uma cama. Ponha-a no chão, preferencialmente longe de janelas e portas, e, ao clicar com o botão direito, você dorme e acorda na manhã seguinte. Útil, né? E, melhor: depois de dormir, se você morrer, volta para a cama!

25Abr/110

Plugin Multilingual no WordPress

Depois de anos na blogosfera, consegui dar um jeito de publicar meus posts em mais de uma língua. Instalei um plugin no WordPress para fazer esse trabalho. Agora, posso publicar conteúdo mais global, sem "ferir" a língua pátria no meu blog.

19Abr/110

GIFs anormalmente longos

Em um fórum de Minecraft, encontrei uns dois avatares cujos GIFs são verdadeiros filmes anormalmente longos. Este parece até o jogo Marvel vs Capcom e tem 550 quadros em loop:

Este outro presumo ser chinês, tem absurdos 1753 quadros e conta uma enorme história:

Categorias: geek Sem Comentários
18Abr/110

Usando o phpinfo() com modsecurity

É normal precisar do phpinfo para obter alguma informação básica sobre sua instalação LAMP ou WAMP. Mais fácil que procurar manualmente pelas extensões ou fazer uma tela para mostrar os ENVs. Com o modsecurity ligado, essa função é bloqueada. O que fazer, então? Noobs que eu vi na Internet geralmente desligam o modsecurity. Gente mais cabeça vai no servidor e usa o comando "php -i", que gera o mesmo resultado, mas em modo texto.

PS: Você ficaria surpreso com a quantidade de pessoas por aí que acha que a solução quando leva um "access denied" é simplesmente desligar a segurança.

17Abr/110

Efetuando cache no WordPress

Depois de ver que a pobre máquina afoga cada vez que algum bot de indexação (Google, Yahoo!, etc) varre os meus blogs, decidi implementar táticas de otimização.

Graças a Deus, só precisei instalar um plugin no WordPress, efetuar meio mundo de configurações (inclusive um CDN na Amazon) e pronto! Todo o conteúdo "dinâmico" (posts, categorias, etc) com cache em disco e todo conteúdo estático (imagens, CSS, JS, etc) no Amazon CloudFront com redundância até dizer chega.

Estou imaginando o trabalho safado se precisasse fazer tudo isso manualmente...

16Abr/110

IRPF 2011 for Mac

A experiência mais aterradora que tive com meu Mac até agora foi fazer a declaração do IRPF 2011. Tenho 101% de certeza que a RFB não testou em um Mac, ou, se na remota possibilidade alguém testou, com certeza foi um usuário Windows que o fez.

Começa pela instalação, que pede senha de administração. Desisti e fui para a versão em JAR, para rodar no diretório de download. Ao preencher, comecei a ver os problemas básicos: o scroll multitouch não funciona. Cmd-C, Cmd-V também não (esse eu descobri que preciso usar a nada ortopédica "variante Windows" Ctrl-C Ctrl-V). No menu Aqua, aparece "serpro.ppgd.app.IRPFPGD" no lugar do título da aplicação. Nojento.

Depois de seguir a Marta ("relaxe e goze"), pois sou obrigado a usar esse péssimo instrumental que me forneceram, chegou a hora de "gravar e enviar". Algum dia ainda vou entender por que precisa de DOIS programas para isso. Na época da versão Windows, até entendo. Não é fácil transformar um .EXE em um componente e o ReceitaNet envia DIRPF, DITR, etc. Mas, em Java, faça-me o favor!

Declaração gravada, hora de ativar o ReceitaNet. Qual não é minha surpresa quando vejo que é um JAR de instalação! Abstraindo, decidi continuar. Veio a parte legal - diretório de instalação: "/Programas RFB/ReceitaNet 2010 02b"! Madre pérola! Como assim, instalar na raiz? Depois de envelhecer uns 5 anos em 5 segundos, alterei o endereço para usar uma pasta mais Mac-like (primeira vez que precisei fazer isso no Mac) e, como todo bom software Windows migrado para Mac, ele cria uma pasta com um executável e arquivos de dados! Ai, Jesus! Ficou parecendo um cara fantasiado de Superman no meio de uma congregação Amish.

Seguindo a festa, entrei no tal ReceitaNet. Uma aplicação super-simples com um logo animado (eca), uma seleção de arquivo e um botão "enviar". Mais uma vez: por que não embute essa coisa na declaração? Daí, vem a boa: onde está o arquivo? Eu imaginei que estaria no diretório do DIRPF, que nem no Windows. Não estava lá!

Por razões desconhecidas, estava em "Documents". Bom, pelo menos fica fácil para importar ano que vem. Depois de enviar, eles mandam voltar ao programa de declaração e imprimir o recibo. Vem a pergunta: onde, em nome de Cristo, foi parar meu recibo? Não aparece na lista e a pasta "transmitidas" está vazia! No apogeu da intuitividade, eu preciso mandar "procurar" e navegar manualmente do meu "home" até a pasta "gravadas", selecionar o arquivo enviado, selecionar novamente na lista que aparece e então imprimir.

Como se não bastasse, ele não pergunta qual impressora vou usar! Mandou imprimir para a primeira que apareceu. Ou seja, usar o gerador de PDF do Mac, nem pensar. Mandar automaticamente por e-mail usando o "Mail as PDF" virou um delírio.

Segunda tentativa. Navega mais uma vez da pasta "home" para a "gravadas", seleciona, seleciona e clica em "Gerar imagem PDF". Abre o Preview com o arquivo. Onde o arquivo foi gerado? Deus sabe e agora não me importa, pois cumpri minha obrigação anual com a vontade de mandar alguém tomar um suco.

Parabéns para a RFB. O sistema funciona muito bem no Mac. Para não dizer o contrário.

14Abr/110

Terror suicida chega ao Brasil

Desde que eu vi a reportagem sobre o sujeito que entrou na escola atirando, eu imaginei que ele deveria ter sido alguma vítima de bullying que perdeu as estribeiras e decidiu bancar o justiceiro.

Dito e feito. A TVFolha publicou este vídeo com ele lendo sua carta suicida:

Típica carta de suicida, no qual a única solução para a vida dele é morrer e levar alguns consigo. Aposto que vai ter mais uns dois ou três casos similares, envolvendo pistolas, e, quem sabe, até algum homem-bomba - todos com a mesma motivação.

Sinceramente, eu sofria muito "bullying" na escola, mesmo quando não havia uma palavra para descrever tal fato. E, posso até dizer que ainda sofro, pois, por não pertencer ao grupo de fulano ou ciclana, arquei com as conseqüências. É um fardo muito pesado para carregar, nem todos agüentam. Mas, como infelizmente, "manda quem pode, obedece quem tem juízo", ninguém que "pode" pensa que, um dia, as pessoas podem perder o "juízo".

Na minha humilde opinião, não é só ele quem deve ser considerado culpado pelas 13 mortes do dia. Todos aqueles que praticaram bullying contra ele também tem sua culpa.

Só quem sofreu todo santo dia na escola consegue chegar próximo de entender o que passou pela cabeça dele. Não estou justificando-o, mas, cá entre nós, o que diferencia ele de alguém que mata "por amor" ou até de alguém que mata "por justiça"? Seria uma escala gradual de "motivos aceitáveis para matar"? Na minha opinião, matar é matar, e, quem queria que ele fosse torturado e morto não fica muito distante de um assassino sangue-frio.

Aliás, esse "ódio" pelo assassino só aconteceu por ser o primeiro caso no Brasil. Aposto que, se acontecer como eu disse, o terceiro caso mal vai ser contado pelas pessoas com a seguinte frase: "agora virou moda entrar na escola atirando". Afinal, o primeiro terremoto em Christchurch foi noticiado como bombástico, enquanto o segundo foi só "mais um terremoto".

13Abr/110

Curriculum familiar

Virou febre esses adesivos de família no carro. Papai, mamãe, filhinho, cachorrinho e por aí vai. Somando isso aos outros adesivos de academia, curso de faculdade, nomes, e afins, tem pessoas com um perfil mais completo no carro do que no Facebook.

Agora só falta conta bancária e telefone para recados para dar um kit completo aos bandidos. Qualquer assistente de segurança júnior sabe que é suicídio dar sua rotina completa de bandeja assim. Antigamente, bandido precisava ficar horas de tocaia vigiando para saber onde a pessoa vai normalmente e em quais horários. Agora, só precisa ver o carro da vítima!

Para mim, é vantagem, pois posso ir e voltar sempre no mesmo horário e caminho sem me preocupar, pois tem muito alvo mais fácil na rua.

Aliás, ainda não vi as "famílias modernas" nesses carros. Será que não fazem adesivos para homossexuais ou o pessoal LGBT é mais inteligente e sabe dos riscos que corre ao ficar divulgando esse tipo de informação?

E os amantes, então? Alguém vai colocar o "Ricardão" ou a "Pat" no carro também? A versão "vandalismo" da idéia não é nova: