Blog do Eduardo Costa Meu blog pessoal

7Mai/110

Vantagem do Mercurial sobre o Subversion/CVS

Acho que essa também vale se for o GIT. Bom, hoje, depois de uma ou outra semana trabalhando duro em um projeto pessoal para iOS, decidi que era hora de colocar as 64 revisões do Mercurial em meu servidor central. Criei o repositório no servidor, mas, na hora de fazer o "push", errei na URL e joguei em cima do meu projeto CuteGod (para iOS). Droga de MacHg que não avisa que o destino não é válido!

Ficou uma verdadeira zona. Não sei como, o que tinha do CuteGod ficou "abaixo" do que veio nesse novo projeto. Total bagunça! E nem lembro se meu último backup foi tão recente assim (a ponto de não afetar outros projetos)!

Instantes de muitos palavrões mentais depois, comecei a ver como faria para recuperar o estrago. Alguns links depois, eu lembrei: sistema distribuído, oras! Significa que eu tenho uma cópia completa e autônoma aqui na minha máquina. Bastou jogar a pasta destruída fora, criar uma nova e fazer um "push" do zero. Simples! Tudo voltou ao normal: tags, revisões, históricos...

Muito mais fácil que "voltar backup". Quero ver alguém fazer isso no SVN ou no CVS!

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...

7Mar/110

Blender 2.5 x 2.4

Acabei de enviar para revisão meu primeiro jogo para a Apple. Agora, basta esperar e rezar para não ter nenhum defeito grave que impeça a publicação. Enquanto espero, já que ainda tenho tempo livre, estou bolando o próximo jogo. Agora vou partir pro mundo 3D - um FPS ou similar. Usei muito OpenGL ES nesse primeiro projeto, mas através vistas ortogonais para gerar um sistema 2D. Esse vai ser completamente 3D,  e espero poder investir em shaders também - tenho muito interesse nessa tecnologia.

Para alimentar o jogo com modelos, pensei em utilizar o Blender. Após tentar relembrar como operar-lo, descobri a infeliz verdade: a versão 2.4 é uma completa porcaria no Mac. O scroll não funciona corretamente, a rotação precisa ser emulada no teclado, muito atalho só funciona com "Control+Option+Shift" (altamente ergonômico), e a "cereja do bolo": preciso abrir o pacote da aplicação para incluir novos "scripts".

Já tinha pensado em desistir do Blender quando encontrei a versão 2.56, supostamente beta. Impressionante! Parece outra aplicação. Os anos open-source fizeram bem a esse sistema. O mouse funciona como esperado num multitouch: dois dedos para scroll nas quatro direções, "pinçar" para zoom, Option+scroll rotaciona, e, claro, em "Library > Application Support" apareceu uma pasta "Blender" (o equivalente ao "Application Data" do Windows).

A interface também mudou muito. Para quem precisa relembrar tudo que nem eu, não faz diferença, mas os profissionais vão sofrer um pouco. De qualquer forma, exceto pelo menu Aqua, tudo no Blender está incrivelmente integrado ao Mac. Parabéns para a equipe de desenvolvimento! Realmente é um feito o que conseguiram fazer!

10Set/100

Upgrade para o WordPress 3.0.1

Hoje consegui concluir o upgrade do meu arcaico WordPressMU (versão desconhecida) para o novíssimo WordPress 3.0.1. Minhas primeiras impressões foram ótimas: a interface administrativa está muito profissional (parece até um CMS), não preciso mais de plugins específicos para o MU, upgrade inline, entre outras vantagens menores.

Apanhei em detalhes, mas nada relacionado ao WP (somente burrice minha, mesmo). No geral, o procedimento não poderia ser mais fácil:

  1. Efetuar backup (claro);
  2. Remover as pastas admin e includes;
  3. Remover os arquivos da pasta raiz (EXCETO o wp-config);
  4. Substituir os arquivos e pastas removidos pelo conteudo do ZIP; e
  5. Abrir o admin e seguir as instruções (editar arquivos, etc).

Parabéns ao povo do WP. Essa nova versão está um espetáculo.

29Mar/100

Big f***ing fail do Firefox

Sempre tive "A" capacidade para afundar sistemas. Nada maldoso - estou mais para aquele cara de "Loucademia de Polícia" que vai derrubando tudo pelo caminho. Já achei bugs que afundaram sistemas em todas as fases possíveis: desde o negócio, passando por requisitos, análise, programação, testes, implantação, e, claro, pós-produção. Nada mais legal que ver o sistema afundando feito cocô na privada bem no instante após entregar para o cliente!

Dessa vez, minha vítima foi o Firefox. Sempre fiquei intrigado em saber como ainda tem criaturas míticas que conseguem achar bugs nesse sujeito. E, claro, com minha habilidade sobre-humana, eu entrei para esse hall da liga.

O meu bug, com número 555504, é simples, porém, elegante. Se você digita algum termo que não é nem URL nem um domínio válido na barra de endereços do FF, este executa uma pesquisa "I feel lucky" no Google, que, por sua vez, traz o primeiro resultado automaticamente. Até a aí, mil maravilhas.

Outro recurso curioso é: se um site for cadastrado como malicioso, o navegador normalmente abre uma tela vermelho-sangue informando que esse site é do mal, etc e tal.

Perfeito! Coisa de navegador seguro. Ou não? Experimente arrumar uma combinação de termos de pesquisa "lucky" que envie para um site malicioso. Resultado? Tela vermelha? Não! O FF abre direto! Passe livre para os bastidores! Yikes!

Até agora, o bug ainda está como "não confirmado", mas creio que vai dar trabalho testar isso - afinal, não é fácil arrumar uma combinação tão curiosa de parâmetros.

Mais nerd que achar falha de segurança no Firefox não conheço!

21Mar/100

Fedora 12 em um Acer Aspire One

Meses atrás fui meio "obrigado" a trocar de notebook (o anterior estava, literalmente, com alguns parafusos soltos), comprei um netbook Acer Aspire One, daqueles com disco flash, ao invés de HD. O linpus que veio com ele era muito bom - rapido, intuitivo.

Embora seja baseado no Fedora e eu consiga usar o yum para instalar alguns softwares básicos, esbarrei na hora de instalar o gcc (quem sou eu sem um compilador C decente?)

Decidi, então, tirar um backup do sistema original para instalar um Fedora 12. A instalação pelo liveusb foi tranqüila e, ouso dizer, rápida. Na wiki do Fedora, tem um artigo sobre instalação e otimização em um Acer Aspire.

As dicas funcionam bem, mas algumas coisas ficam diferentes, comparadas com o Linpus:

  • SELinux e IPV6 são cruéis quanto a performance. Desativar os dois aumenta muito a velocidade do sistema;
  • A luz de wireless só fica acesa quando existe tráfego (que nem a luz de uma placa de rede de um Desktop);
  • O botão de ligar/desligar o wifi funciona, por isso, recomendo configurar a conexão com o NetworkManager e ligar a ativação automática. Deste jeito, a conexão fica parecida com a do Linpus, exceto pelo ícone que não aparece na tela ao apertar o botão;
  • A configuração do GRUB original tem dois parâmetros a mais (loglevel=1 nolapic_timer), mas a configuração mais importante é sched=0, para desligar o escalonamento de disco (já que não existe delay mecânico em discos flash);
  • Pulseaudio não funciona nem amarrado. Infelizmente, precisa desativá-lo para voltar ao ALSA. Descobri que qualquer atraso no CPU torna o audio do PA um monte de ruído. Ou seja, tocar MP3 funciona, mas vídeos (principalmente Flash), não;
  • Gnome é muito legal, mas é pesado, com muitas tarefas em background. Mesmo com dois cores, o sistema fica intermitente e sempre com o ventilador do CPU ligado, até quando ocioso. Mudando para o XFCE reduz o consumo (a ventoinha nem liga mais) e mantém os recursos gráficos;
  • Para a alegria da Apple, Flash parece coisa do capeta. Qualquer acesso ao YouTube fica impraticável com vídeos maiores, pois um core fica ocupado com o navegador e outro, com o Flash (cada um, a impressionantes 40%, mesmo em pausa). É mais fácil usar o NetVideoHunter para baixar e ver o FLV offline;
  • Ainda não consegui configurar os indicativos visuais de aúdio no XFCE, mas nem faz tanta falta assim ver um ícone bonito toda vez que mudar o volume.

No geral, o netbook, embora aparentemente limitado, quando comparado a um notebook (ou a um desktop), funciona tão bem quanto e até melhor. Com três horas de bateria (que caem para duas e meia com Wifi, som e vídeos), mais uma rede sem fio incrivelmente rápida (atingindo fácil 1 megabyte), consigo fazer de tudo - até programar com o NetBeans.

Tirando o fato de que uma ou outra aplicação não foi testada em resoluções de 600 linhas, estou gostando mais do netbook. Posso trabalhar no sofá, assistindo "Star Trek: Deep Space 9", colocar o sistema em Stand By para pegar algum petisco, e até usá-lo em "certos cômodos", para não perder a linha de raciocínio.

5Fev/101

Mais um exemplo de parâmetros GET

Tempos atrás, fiz um post sobre o Zope/Plone que atraiu alguns xiitas (que nem jogar pão para atrair pombo). Um dos graves defeitos desse sistema, na época, era a possibilidade de injetar mensagens com parâmetros GET.

Os xiitas Zope/Plone cairam matando, dizendo que o Google também é assim, que alterar parâmetro "q" também seria injeção, blá blá bla. Na época, o exemplo não era tão legal quanto o que vi no MeioBit hoje. José Serra falando de tequila no seu site? Não! Somente o exemplo de como um sistema orientado a gambiarras pode gerar as mais diversas piadas.

Pena que não guardei o link do Consegi, senão, tentaria colocar o mesmo anuncio de bebidas lá...

23Dez/090

Limpando os locales do Fedora

Se você tem problemas de espaço em máquinas Fedora (ou paga por GB usado), vai gostar de saber que é possível eliminar algumas centenas de megabytes de lixo.

O truque? Remover o suporte a todas as línguas desnecessárias que o linux suporta (500 mais ou menos). Eu, por exemplo, só utilizo o desktop em Português e, preferencialmente, em Inglês. Por que, então, preciso jogar 400mb fora com suporte a Português de Portugal, Inglês Australiano (yikes!), Francês, Italiano, Alemão, Árabe, Chines e variantes, incríveis DEZESSETE variantes do Espanhol, e eteceteras?

O truque é simples: vá na pasta /usr/share/locale e detone praticamente tudo. Uma dica é renomeá-la para "_locale", mover só o que precisa para uma nova pasta "locale" e, após algum tempo de teste, apagar a pasta "_locale".

Para uma limpeza mais pesada, remova também os arquivos de ajuda do GNOME (para o KDE, talvez tenha algo similar - fico devendo essa):

cd /usr/share/gnome/help
find * -mindepth 1 -maxdepth 1 -type d \
  -not \( -name "en*" -or -name pt -or \
          -name pt_BR -or -name C \) \
  -exec rm -rf '{}' ';'

Até aqui, dois problemas: ao atualizar ou reinstalar, tudo volta; e, ao usar o "rpm -V", um monte de erros de "missing file" irão ocorrer. A solução achei perdida na web. Vá na pasta /etc/rpm e crie um arquivo "macros.lang" com a seguinte linha: "%_install_langs en:en_US:pt:pt_BR".

Pronto! Nada mais de warnings nem de espaço jogado fora (pelo menos, com locales)!

Essa dica eu testei no Fedora 11, mas deve funcionar em qualquer distro baseada em pacotes RPM (RedHat, CentOS, etc).

23Nov/090

Primeiras impressões sobre o Google Chrome

Como "minhas" máquinas, tanto em casa quanto no trabalho, tem apenas um mísero gigabyte de memória (lembro-me da época em que isso era muito), preciso improvisar direto. O Firefox, por melhor que seja, é pesado demais para manter 24/7 junto com o NetBeans, Jetty/Tomcat, JOGL e etcs.

Decidi, então, experimentar o anoréxico Google Chrome. Aparenta ser leve, mesmo. O startup é rápido e o footprint é obviamente proporcional ao número de abas. Basta abrir o gerenciador de tarefas para notar que tem um processo por aba. Se tiver um IPC bom, isso torna válida a regra "quanto-menos-abas-melhor" que os leigos tanto conhecem e que o Firefox joga no lixo com o histórico de abas.

O que leva a perguntar: já que a aba tem um processo próprio, o que acontece se ele morrer de causas não-naturais? Tasquei um SIGKILL (ou similar, no Windows) e tudo aparentou estar normal. Normal até demais: a aba ainda estava lá! Mas, para minha surpresa, eis o conteúdo dela:

Erro no Google Chrome

Fora a comédia que é essa tela, fiquei admirado, pois é uma arquitetura bem mais robusta que o "Isto é embaraçoso" do Firefox. Presumo que fica mais difícil o navegador inteiro cair.

Mas, para mim, ainda continua sendo mais um produto Beta do Google. Espantosamente, não consegui publicar este post no Chrome - todas as quebras de linha sumiram! Vai servir para economizar um pouco de memória, mas ainda vai demorar muito para substituir o Firefox.

PS: Por quê chamei o Chrome de anorexico? Veja a imagem a seguir...

Mulheres x Browsers