A verdade sobre o aquecimento global

Aquecimento globalA humanidade sempre teve – e terá – grandes problemas com os quais lidar. Tradicionalmente, a sociedade como um todo exigia que os governos fossem os responsáveis pela solução dos mesmos.

Entretanto, nesse novo milênio, a rápida difusão da informação e a visível ineficiência dos governos influenciaram na criação de uma nova postura global, na qual a sociedade civil, juntamente com empresas que detêm o processo produtivo, são as verdadeiras forças motrizes capazes de solucionar, ou ao menos dirimir, as dificuldades hoje encontradas em nosso mundo – tanto no âmbito social quanto ambiental.

Ainda que problemas sociais tenham um grande apelo, acho que a questão ambiental, principalmente no tocante do aquecimento global, é a que mais atrai as atenções, desde a imprensa até políticos (vide Al Gore), passando pelo indivíduo comum.

Entretanto, apenas agir não é o suficiente; é necessário um direcionamento para que os esforços realmente dêem resultado. E para tanto, o primeiro passo é entender a origem do problema.

O que causa o aquecimento global?

Liberação femininaEmbora muitos defendam ser um acontecimento cíclico, que já ocorrera em outras épocas em nosso planeta (que seria causado por alterações na superfície do Sol, e portanto alterando a intensidade da radiação solar), aceita-se mais amplamente a idéia de que o aquecimento global é conseqüência dos atos do homem.

Enganam-se todos. A verdade é uma só – não se tratam dos atos do homem, mas sim das mulheres.

Com a liberação feminina nos anos 1970, deu-se progressivamente o aumento da liberdade – especialmente financeira – das mulheres, que passaram então a trabalhar fora, ganhar seu próprio dinheiro, especializarem-se, ocupar postos tradicionalmente masculinos e a consumir. E consumir. E consumir. Consumo em larga escala, que embora seja uma das características do regime capitalista, tem muito mais afinidade com o universo feminino.

Cinco mil anos de civilização, trezentos de industrialização, e a humanidade não conseguiu exaurir os recursos naturais e causar danos tão graves ao meio ambiente quanto as mulheres conseguiram em menos de 40 anos. Bastou menos de meio século para que elas, em sua desenfreada avidez por consumir, gerassem problemas como a crise do petróleo ao final da década de 1970 até o degelo das calotas polares e a não ratificação americana do Tratado de Kyoto. Creio inclusive terem sidos os gases exalados da queima daqueles soutiens os responsáveis pelo primeiro buraco na camada de ozônio.

Sendo assim, é importante o retorno a um status quo em que o consumo seja controlável e que possamos dar tempo para que a natureza se recupere.

Diante disso, é de extrema necessidade o apoio feminino. Só o retorno a um modo de vida tradicional pode realmente salvar o Planeta Terra.

Mulheres, assumam seu papel socialmente responsável e ajudem a salvar nosso lar!
Já pro fogão!

Tags: , , ,

Nerdcore Reloaded

Ok, praticamente pronto. Coloquei outro tema, incluí alguns plugins, me decidi a falar sobre outras coisas.
Talvez agora vá.

A propósito, preciso assistir a trilogia do Matrix novamente.

Chucknismo

Chuck Norris Facts:

Chuck Norris can rollback a TRUNCATE TABLE command.

Tags: ,

Encriptação de senhas no banco de dados

A não ser quando for uma requisição explícita por parte do cliente, uma boa prática de desenvolvimento é sempre encriptar senhas presentes no banco de dados.

Essa prática é interessante tanto para questões de segurança quanto de privacidade – afinal não há razões para que nem mesmo administradores tenham acesso às senhas utilizadas por quaisquer usuários.

Muitos desenvolvedores tem isso em mente, entretanto, porém os métodos usuais utilizados para fazer essa encriptação não é a mais adequada. Na maioria das vezes, em especial no mundo php, a função escolhida para fazê-la é a md5().

O problema de utilização do algoritmo MD5 para encriptação é somente um: ele não é um algoritmo de encriptação. Apesar de “ocultar” o conteúdo original de um texto, esse método foi concebido para ser uma função de hashing.

Ok, ele até dificulta que se descubra qual é o texto original. Porém, se você procurar no google, existe uma porção de páginas com listagens de senhas em MD5, assim como de dicas para desenvolvimento de ferramentas de brute force. O principal problema é que, para uma mesma string, o hash gerado é sempre o mesmo.

O que eu costumo fazer para salvar senhas encriptadas é utilizar a função crypt(). Vamos a um exemplo:

$senha = ’1234′;
$senhaCrypt = crypt($senha);

echo $senhaCrypt;

Execute o exemplo algumas vezes; percebe que cada vez que geramos a senha, a string gerada é diferente? Isso já é um excelente ponto para garantirmos a segurança.

Porém, como fazer para desencriptar a string, já que cada vez que ela é gerada temos um diferente resultado? Outro ponto forte, não há como. Para validarmos se a senha informada é igual a senha encriptada no banco, comparamos do seguinte modo:

$senha = ’1234′;
$senhaCrypt = crypt($senha);

// Ignoramos aqui qualquer tipo de validação
$senhaInput = $_POST['senha'];

if(crypt($senhaInput, $senhaCrypt) == $senhaCrypt))
{
echo ‘Senha válida’;
}
else
{
echo ‘Senha inválida’;
}

Note que para comparação das senhas, comparamos a senha encriptada com o resultado de crypt() novamente, porém utilizando como segundo parâmetro a própria senha encriptada.

Obviamente que o demonstrado aqui é um mero exemplo tosco, e precisa ser estendido para funcionar juntamente a um banco de dados e tudo o mais. Mas a idéia fica aí: utilizando-se crypt(), conseguimos um melhor nível de segurança e de privacidade.

Última dica: para guardar a senha encriptada no banco, utilize um campo texto (varchar, por exemplo) de tamanho 34 bytes – a chamada ao crypt() sempre gera uma string nesse tamanho.

Tags: ,

Trim() em javascript

A boa e velha função trim() é uma excelente pedida em qualquer linguagem, e chega a ser supreendente que javascript não a possua nativamente. Além de eliminar espaços em branco (assim como tabulações) de uma string, é também uma boa maneira pra se fazer algumas validações (como por exemplo verificar se um campo obrigatório não foi preenchido somente com espaços).

Já vi diversas implementações da função trim() – assim como de ltrim() e rtrim() – em javascript, mas acho que nenhuma tão elegante quanto a presente em http://www.somacon.com/p355.php.

String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, ”);
}

String.prototype.ltrim = function() {
return this.replace(/^\s+/, ”);
}

String.prototype.rtrim = function() {
return this.replace(/\s+$/, ”);
}

Utilizando-se de expressões regulares para fazer as substituições de espaços por vazio, o grande lance de elegância de código é utilizá-la como membro do protótipo do objeto String. Assim, basta chamar o método em qualquer váriavel do tipo String, como por exemplo variable.trim().

Ótima pedida para adicionar-se em um arquivo .js para incluir em todas as páginas.

Uma coisa que eu tentei rapidinho fazer e não consegui é adicionar ao protótipo de um objeto uma propriedade baseada em um método. Explico melhor por um exemplo: eu gostaria de adicionar uma propriedade booleana empty para realizar validação; a definiria baseada no resultado de trim(), algo mais ou menos como

String.prototype.empty = (this.trim().length == 0 ? true : false);

Criar a propriedade baseado em um valor é tranquilo (String.prototype.empty = false). Mas e baseado no resultado de uma função que foi definida no protótipo? Alguém sabe como?

Tags: