sexta-feira, 25 de maio de 2012

PHP One-liners ou Incríveis coisas que você pode fazer em PHP com apenas uma linha de código

Uma linguagem de programação é considerada expressiva quando você consegue fazer coisas úteis sem precisar escrever muito código. Devido a sua extensa biblioteca de funções e sua natureza dinâmica a linguagem PHP é uma linguagem expressiva. E aqui vão alguns exemplos desta expressividade.

1. Validar Email

echo preg_match('/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix', $email) ? 'Válido' : 'Inválido';
view raw 01.php hosted with ❤ by GitHub

2. Converter Endereço IP para um número inteiro e vice-versa(útil para armazenamento)

echo ip2long('192.168.0.58');
echo long2ip('3232235578');
view raw 02.php hosted with ❤ by GitHub


3. Filtrar uma lista de números(usa closures)

array_map(function($n){echo $n > 3 ? "$n\n" : '';}, array(1, 2, 3, 4, 5, 6));
view raw 03.php hosted with ❤ by GitHub

4. Ler um arquivo

echo file_get_contents('arquivo.txt');
view raw 04.php hosted with ❤ by GitHub

5. Somar uma lista de números

echo array_sum(array(5, 1, 7, 9.9, 0.1, 19));
view raw 05.php hosted with ❤ by GitHub


6. Achar o menor ou maior número de uma lista

echo min(array(5, 8, 1, 3, -2));
echo max(array(5, 8, 1, 3, -2));
view raw 06.php hosted with ❤ by GitHub


7. Gerar e imprimir o alfabeto

array_map(function($l){echo "$l\n";}, range('a', 'z'));
view raw 07.php hosted with ❤ by GitHub

8. Imprimir as linhas de um arquivo ignorando as linhas vazias

foreach(file('arquivo.txt', FILE_IGNORE_NEW_LINES) as $l) empty($l) ? '' : print "$l\n";
view raw 08.php hosted with ❤ by GitHub


9. Gerar uma senha de 8 caracteres aleatória

foreach(range(1,8) as $v) print chr(rand(97, 122));
view raw 09.php hosted with ❤ by GitHub

10. Comprimir e descomprimir uma string muito longa

$string_comprimida = gzcompress($string_longa);
$string_longa = gzuncompress($string_comprimida);
view raw 10.php hosted with ❤ by GitHub



Espero que seja útil.

sexta-feira, 4 de maio de 2012

Coisas que você não deve colocar no Banco de Dados

Em minhas andanças pela internet eis que me deparo com um ótimo artigo chamada "Três coias que você nunca deve por no banco de dados". É um ótimo artigo, recomendo a leitura.

Basicamente ele fala que evitar armazenar dados binários(imagens, arquivos...), dados efêmeros (informações que são usadas por um curto período de tempo) e logs.

Eu concordo com o que é dito no artigo. Mas venho aqui falar de outra coisa que jamais em hipótese alguma você deve armazenar no banco de dados. Estou falando de CÓDIGO. E aqui estou falando de código mesmo, o mesmo código que você escreve quando está criando uma aplicação.

"O quê? Armazenar código? Isso é totalmente estúpido, quem em sã consciência faria isso?" Devem ser perguntas que permeiam sua mente agora. Mas me pesa muito dizer que já vi isso no mundo real, em uma aplicação web, e o pior de tudo é que eu tive que dar manutenção neste pesadelo.

Veja, com uma parte do código de sua aplicação armazenada no banco de dados coisas simples e corriqueiras como testar sua aplicação, corrigir um pequeno bug, versionar a aplicação, atualizá-la e simplesmente ler o código se tornam tediosas, demoradas e tremendamente propensas a erros.

Quando ocorre um erro no seu código o erro está no código que está dentro ou fora do banco de dados? Ou é um erro que depende de mudanças nos dois códigos? Quando você quiser ler o código para saber o que está errado você tem que manter sua IDE ou editor de texto abertos juntamente com um cliente de banco de dados. A cada novo trecho de código que você quiser ler você tem que fazer uma consulta no banco de dados. E quando você fizer uma alteração no código armazenado no BD você necessitará fazer uma operação de atualização no BD e depois rodar sua aplicação, torcendo para que não tenha cometido nenhum erro de sintaxe ou vai ter que refazer todo este processo. E como desenvolver em conjunto com uma equipe? Os desenvolvedores vão trabalhar juntos em um mesmo banco de dados e correr o risco de um sobrescrever alterações do outro? Ou cada vai ter seu banco de dados e depois sabe-se lá como eles vão sincronizar os códigos de cada um.

Olha eu já vi ideias ruins na área de TI, e algumas delas são minhas mesmo, mas isso de armazenar código da aplicação no banco de dados é de longe a mais abominável de todas. Aqui fica o aviso amigos.