Archive for outubro, 2009

16th out 2009

Novo release da Prototype e atualização da Scriptaculous – agora scripty2

Passou meio que batido – infelizmente – o lançamento de uma nova versão da Prototype, a 1.6.1, no começo de Setembro.

Faça download aqui!

Preciso fazer a minha mea culpa: tenho utilizado em praticamente 100% dos meus projetos a jQuery, e tem sobrado pouco tempo para no mínimo ler as atualizações no blog e fórum da Prototype.

Mas, vamos ao que interessa: as novidades.
Além de ganho de performance – algo que sempre foi criticado na Prototype – agora há compatibilidade com o Google Chrome 1 e o IE8, além de novos eventos de mouse suportados e uma forma de associar chaves/valores a elementos do DOM.
Ao mesmo tempo, foram feitas modificações na forma de distribuicão da biblioteca (com o uso do Sprockets) e a documentação segue o formato PDoc.

Para quem vê apenas essas alterações, pode achar que é pouca coisa, mas a Prototype sempre foi uma biblioteca bem madura, com uma clareza que poucas outras têm. Me parece que o time de desenvolvedores tentou se ater mais a ganhos de performance e documentação para esse release.

Além do que, a Prototype, como já disse outras vezes, é ideal para se construir outras coisas em cima dela – se você quer fazer componentes ricos javascript, eu indico a Prototype como base. E é isso que a antiga script.aculo.us era: um framework com efeitos e manipulação de elementos DOM por javascript, com interações do usuário. Usei o verbo no passado pois o framework está passando por uma bela reformulação, inclusive mudando de nome, para scripty2.

Ainda está em versão alpha, mas muito me agradou o que eu vi, e a forma como o código pode ser escrito. Pouco foi mostrado, mas eu acho que finalmente pode haver uma chance da Prototype voltar a respirar caso o scripty2 venha a conseguir bater de frente com a jQuery UI ou os inúmeros plugins de efeitos escritos para a jQuery (deixando claro novamente que não quero fomentar nenhuma briga entre fanboys de bibliotecas javascript!).

Para aqueles que já usaram, fica a dica. Para aqueles que nunca viram a Prototype, fica a sugestão: faça download e veja o que ela tem de bom, e como ela tem um enfoque diferente de outras bibliotecas.

Posted by Posted by Chris under Filed under javascript Comments 2 Comments »

16th out 2009

1 ano de blog – clap clap

Faz um ano que esse blog começou as atividades. Sim, exatamente em 16 de Outubro de 2008 fiz o primeiro post (aliás, vendo o retrospecto, dia 16/10 parece ser uma data bacana na minha vida :P )
Realmente, não parece – passou rápido, como tudo na vida ultimamente. Foram 275 post, com quase 1500 comentários (sem falar nos milhares de spams barrados pelo Akismet, convite para dar entrevista para revista, exposição de alguns trabalhos que já fiz, etc…)… posts inspirados quase que na sua grande maioria no meu trabalho do dia-a-dia, voltado ao desenvolvimento do mundo web.

Ser responsável por um blog – até a criação dele, era apenas colaborador do O Desenvolvedor – me fez ter a noção de que tudo aquilo que escrevemos nessa tal blogosfera repercute, e mesmo em alguns casos podendo trazer reações ruins, na imensa maioria das vezes o trabalho de fazer um post é recompensador: seja pelo fato de divulgar outros blogs, disseminar conhecimento, estimular debates ou mesmo dar umas risadas.

Não sou capaz de lembrar de cabeça de todas as pessoas/blogs que conheci por aqui, por isso vou evitar fazer referências… mas agradeço a todos pelas visitas, comentários e trocas de idéias. Muita coisa boa aconteceu, e a certeza de que mais ainda estão por vir.

Obrigado!

Posted by Posted by Chris under Filed under Diversos Comments 9 Comments »

14th out 2009

Criar um arquivo de log por dia no Apache com o rotatelogs

Vi ontem no blog do Danilo um post sobre como criar Virtualhosts no Apache, para servir diversos sites, e aproveitando a idéia, vale a pena falar como criar logs para cada Virtualhost.

O mais básico é dentro da diretiva do Virtualhost dizer que vai haver um CustomLog (log customizado) em uma determinada pasta, com um certo formato. O que eu sempre uso é algo assim (aproveitando o exemplo do Danilo):

<VirtualHost *>
    ServerName meusite.dev
    DocumentRoot /var/www/meusite.dev
    CustomLog "/var/www/meusite/log/access.log"  combined
</VirtualHost>

No caso,  a pasta /var/www/meusite/log deve ser criada e o Apache deve ter permissão de escrita, e combined é o formato do log que o Apache vai criar (existem diversos, que podem ser encontrados na documentação oficial).

Agora, algo mais bacana é criar um arquivo de log por dia. Porque? Simples: um arquivo de log de um site mesmo de pequeno porte pode chegar facilmente a gigas de tamanho em pouco tempo – pouco tempo = poucos meses.
Criando um arquivo por dia, é mais fácil de se fazer backup, ter controle do que está sendo logado e mesmo para usar os logs – como com um log analyzer. Para isso, é possível usar no linux o rotatelogs. Sei que no Windows é possível fazer isso também, mas não lembro de cabeça qual é o aplicativo que o faz.

<VirtualHost *>
    ServerName meusite.dev
    DocumentRoot /var/www/meusite.dev
    CustomLog "|/usr/sbin/rotatelogs /var/www/meusite/log/access_%Y%m%d.log 86400 -180"  combined
</VirtualHost>

Nesse caso, para cada dia (86400 segundos) é criado um arquivo diferente, com o nome no formato desejado (underline, ano, mês e dia no final). Voi-lá, tudo funcionando!

Posted by Posted by Chris under Filed under Tecnologia Comments 1 Comment »

13th out 2009

O POG nosso de cada dia #16

Faz tempo que não posto um POG por aqui, né? Bem, vamos tirar a poeira com uma coisa bonita.

O problema

Mais uma vez nosso querido IE6… imagine um menu em forma horizontal com listas nas verticais, uls aninhadas, uma dentro da outra, com uma certa hierarquia. Já tenho um código pronto há muito tempo, que funciona bem, que tem um javascript para simular o :hover em elementos que não são <a>. Não, não é nesse js que está o POG a ser apresentado (mas bem que poderia ser!), a questão é no CSS. Como os itens flutuam (float) não há width:auto que faça com que eles ocupem o espaço do texto – as lis acabam ficando com a largura total do pai.
Ah, sim, antes que comentem: existem várias soluções, muito boas, para menus com dropdown. Já pesquisei por todas, mas nenhuma atende 100% as necessidades que são impostas nos projetos que faço aqui na empresa, pois os menus são bem complexos.

O POG

Calcular a largura de cada item e deixar explícito por CSS inline. Como fazer isso? Uma função que retorna a largura de um texto, dependendo dos caracteres que o compõem, com isso a li vai ficar com a largura fixa no html, não correndo risco do width:auto não funcionar como previsto.
Abaixo segue o código de uma função, que usamos aqui, feita em Velocity – apesar da linguagem não ser de conhecimento popular, é fácil entender o que ela faz. Ah, sim, isso vale para fontes com tamanho 12 pixels!

#macro(largura $teste)
#set($largura = 0)
#if($teste.length() > 0)
#set($total = $teste.length() - 1)
#foreach($i in [0..$total])
#set($j = $i + 1)
#set($letra = $teste.substring($i,$j))
#if($letra == " ")
#set($largura = $largura + 2)
#elseif($letra == "i" || $letra == "í" || $letra == "j" || $letra == "l")
#set($largura = $largura + 3)
#elseif($letra == "f" || $letra == "r" || $letra == "t" || $letra == "!")
#set($largura = $largura + 4)
#elseif($letra == "c" || $letra == "ç" || $letra == "y" || $letra == "I" || $letra == "Í" || $letra == "J" || $letra == "-" || $letra == "|")
#set($largura = $largura + 5)
#elseif($letra == "s" || $letra == "v" || $letra == "z" || $letra == "E" || $letra == "É" || $letra == "F" || $letra == "L")
#set($largura = $largura + 6)
#elseif($letra == "C" || $letra == "Ç" || $letra == "D" || $letra == "G" || $letra == "H" || $letra == "R" || $letra == "U" || $letra == "Ú" || $letra == "Ü")
#set($largura = $largura + 7)
#elseif($letra == "M" || $letra == "O" || $letra == "Ó" || $letra == "Q")
#set($largura = $largura + 9)
#elseif($letra == "m" || $letra == "W" || $letra == "%" || $letra == "@")
#set($largura = $largura + 11)
#else
#set($largura = $largura + 7)
#end
#end
#end
#end

Posted by Posted by Chris under Filed under POG Comments 8 Comments »

10th out 2009

vnStat PHP Frontend

Em breve creio que vou escrever um manual sobre como configurar um servidor completo Linux com a quantidade de posts que tenho feito com as (novas) tarefas que tenho feito – e isso é bom, pois serve no mínimo como aprendizado. Bem, vamos lá: estava precisando de um analisador de tráfego pro servidor, uma vez que o da Locaweb ou não existe ou não consegui achar como acessar.

Bem, o primeiro passo foi instalar o vnStat:

apt-get install vnstat

E configurá-lo

vnstat -u -i eth0

Com isso, foi criado o que o database para o vnStat na saída eth0

Próximo passo foi baixar o vnStat PHP Frontend, que nada mais é do que um frontend para o vnStat para ser acessado pelo browser. Depois, só precisei alterar o config.php dizendo o caminho do bináio do vnStat

$vnstat_bin = ‘/usr/bin/vnstat’;

E tudo funcionando! Pelo browser, agora tenho estatísticas com essa carinha, bem agradável

Posted by Posted by Chris under Filed under Tecnologia Comments No Comments »

09th out 2009

Sendmail no servidor linux muito lento?

Continuando a saga da configuração do servidor cloud da Locaweb que comecei a usar, o que mais me deu dor de cabeça foi o envio de e-mails usando o sendmail do linux. Eu até ia instalar o Postfix, mas estava faltando tempo, então fiz o basico e instalei o sendmail e configurei no php.ini para que ele fosse usado, normalmente, com o

sendmail -t

Primeiro teste, e muito lento o envio. Testei denovo, lento denovo… comecei a ficar preocupado.
Depois de muito vasculhar, cai no forum do própria Locaweb no qual um usuário falava que teve o mesmo problema e que isso tem a ver com os DNS configurados no hosts da instalação padrão do servidor.
Por padrão, ele vem assim:

127.0.0.1 localhost
187.45.206.79 XXXCNN[xxxx]

*o [xxxx] é o número da máquina que a Locaweb me forneceu.

O problema é que o sendmail se perde para achar o host, pois não há um domínio completo, e ele fica procurando em diversos locais, por isso a demora.

A solução é simples: só configurar os domínios completos

127.0.0.1 localhost.localdomain localhost
187.45.206.79 XXXCNN[xxxx].hospedagemdesites.ws XXXCNN[xxxx]

Não sei se a minha explicação dos motivos está totalmente correta – existem muitas páginas no Google falando a respeito, é só procurar por “sendmail + dns lookup“, mas aparentemente a solução funciona :)

Posted by Posted by Chris under Filed under Tecnologia Comments 1 Comment »