Apresentei hoje na UFCG (no Software Freedom Day – Campina Grande) a palestra Software livre e padrões abertos no desenvolvimento Web, falando da importância dos padrões abertos e do PHP como solução livre para o desenvolvimento Web.
Estou de volta depois de mais um FISL, o evento que é como a MECA dos nerds.
O evento no geral foi muito bom, tive a oportunidade de conhecer outras pessoas que fazem o PHP acontecer no Brasil no espaço destinado ao grupo PHP Brasil Comunidades que reune os representates dos grupos regionais (ou não) de usuários do PHP no Brasil.
No meu ver o único ponto negativo foi todo o tumulto que foi gerado pela visita do presidente que atrapalhou muito o andamento do evento devido às operações de segurança, como o isolamento da área dos stands.
Apresentei a palestra “PHP não é coisa de moleque” numa versão revista e ampliada da que já publiquei aqui no meu blog. Fiquei feliz com a repercussão, a sala lotada, a fila do lado de fora e o feedback das pessoas. Seguem os novos slides:
O II Encontro PHP-PB foi um sucesso total! Mais de 300 participantes, muitas doações arrecadadas para a Casa da Criança com Câncer, muitos brindes e muita gente satisfeita! Estamos todos de parabéns.
Apresentei a palestra PHP Jedi – Boas práticas e alta performance:
Até parece que foi ontem que tivemos o primeiro encontro do grupo, mas fez tanto sucesso que o pessoal não aguentou esperar muito para realizar o II Encontro de desenvolvedores PHP da Paraíba. Nesse momento em que estou postando já chegamos a marca de 280 inscritos!
As palestras abordam temas como: Wordpress, Moodle, Certificação Zend, Boas práticas, Cloud computing entre outros…
Finalmente fiz a famigerada prova! Não sei se tem algum real valor no mercado, mas de qualquer maneira fiz também como um desafio pessoal.
Aproveitando as férias de Janeiro, fui até Hellcife (o test center mais próximo fica lá O.o) fazer a prova de ZCE. Vou fazer aqui alguns comentários para tentar ajudar, dentro do possível, futuros candidatos. Para fazer a prova é necessário aceitar um NDA, então não posso divulgar trechos da prova, correndo risco até de punição judicial. Mas vou tentar dar algumas dicas mais gerais.
Eu fui fazer a prova bastante tranquilo, pois antes de chegar lá fiz 4 simulados e no último tive EXCELLENT em todos os tópicos. Porém, não sei se por azar meu, ou pelo nervosismo na hora, as questões reais vieram mais difíceis do que as que eu já tinha feito.
A prova tem 70 questões e você tem 90 minutos para responder, dentre essas questões existem as que são de múltipla escolha, onde você seleciona uma ou mais alternativas corretas (dependendo da questão, algumas você marca um “radio”, noutras “checkbox”) e outras onde você precisa realmente escrever a resposta (nome de função, nome de padrão de projeto ou output de um script mostrado).
Eu acabei e revisei tudo faltando 5 minutos para estourar o limite de tempo, e tremi feito vara verde para clicar no botão “Finish Exam” (ou algo equivalente), e prendi a respiração (todo cagado) enquanto a ampulheta rodava e o sistema processava o resultado.
O nível da prova é algo entre razoável e difícil, não requer conhecimentos Jedi obscuros, mas também não é colher de chá para quem está começando. Requer estudo não só do Study Guide, mas também do manual oficial do PHP e MUITA vivência com a linguagem, pois tem MUITAS pegadinhas.
Fazer os simulados ajuda muito, pois mostra o estilo das perguntas e te direciona para alguns tópicos que são importantes para serem estudados, já que existem coisas que não fazem parte do dia-a-dia de muita gente. Eu por exemplo nunca tinha mexido com sockets nem ido mais profundamente nos stream wrappers do PHP, e depois de levar pau em Streams And Network Programing no simulado, estudei e fiquei craque
Uma das coisas que eu acho mais crítica não só nessa prova, mas no dia-a-dia do programador PHP, é a falta de padronização no nome das funções. Você se confunde quando tem e quando não tem underscore, quando o nome é escrito de maneira completa ou abreviada, e a ordem do needle e do haystack (Graças a Deus não caiu isso de ordem de parâmetros na prova).
Se você pretende fazer a prova, recomendo que mesmo com a prática do dia-a-dia, estude principalmente as coisas que teoricamente são simples, mas que dão muito pano pra manga:
String, Arrays (e a imensidão de funções que existem para se manipular esses dois tipos) as características de uma aplicação Web, como gerenciamento de cookies e sessões. São coisas simples mas existem muitas funções disponíveis e algumas ambiguidades. E que tenha nervos de aço para estar atento às pegadinhas.
Caching é fundamental para a escalabilidade de aplicações Web. Existem diversas ferramentas que oferecem diferentes maneiras de se fazer isso, seja no Smarty, no APC, nos diversos frameworks, ou Memcached para os mais drásticos…
Mas essa é a “maneira Rasmus Lerdorf” de se fazer cache com PHP sem nenhuma ferramenta externa e com uma sacada fenomenal.
Para um servidor Web é muito mais rápido servir arquivos estáticos do que esperar que aquele arquivo seja interpretado por algum módulo ou que seja executado em CGI e é isso que esse método faz, gera arquivos estáticos sob demanda, utilizando os recursos que o Apache oferece.
Agora imagine que você tem um site de notícias e quer que elas sejam tratadas como arquivos estáticos, e os links para cada notícia seria algo como:
http://meusite.com.br/noticias/000001.html
1º passo: Setamos nas configurações do Apache para que a página de erro 404 seja um arquivo .php (isso pode ser feito no .htaccess da pasta ou nas configurações do Apache propriamente dito). No caso do .htaccess, basta colocar isso:
ErrorDocument 404 /noticias/gera_cache.php
2º passo: Criamos o arquivo gera_cache.php, que irá tratar as requisições que teriam como resposta o erro 404 (Not Found) com o seguinte codigo:
<?php
$id = basename($_SERVER['REDIRECT_URL'], '.html');
/* Acessa a página dinâmica */
$html = file_get_contents(sprintf("http://meusite.com.br/noticias.php?id=%d",$id));
/* O ideal é fazer algum tratamento de erros, para evitar a
criação de arquivos para ids inválidos */
/* Exibe o conteúdo */
header(sprintf('%s 200', $_SERVER['SERVER_PROTOCOL']));
echo $html;
/* Salva o conteúdo em um arquivo .html */
$fp = fopen(sprintf(dirname(__FILE__)."/%d.html", $id), "w");
fputs($fp, $html);
fclose($fp);
?>
Sendo assim, o que vai acontecer:
Quando o usuário acessar pela primeira vez o link http://meusite.com.br/noticias/000001.html, o arquivo /noticias/000001.html não existirá e o usuário será redirecionado para o gera_cache.php. O gera_cache.php acessa a página dinâmica que exibe o conteúdo da página com o id passado (000001) e salva em um html. Nos acessos consecutivos ao http://meusite.com.br/noticias/000001.html o arquivo existirá e não passará mais pelo PHP.
É uma técnica bem “tricky” e que precisa de cuidados, por exemplo, você precisa ter uma rotina que expira os arquivos em cache após algum tempo e quando houver alguma alteração em determinada informação que interfere na página que está em cache, para garantir consistência dos dados. Uma maneira muito simples de se fazer isso é usando a função filectime do PHP para checar a idade dos arquivos em uma rotina que rodaria em background e apagaria os que fossem mais velhos que o tempo desejado. Mas funciona muito bem!
P.S.: Um artigo que li dizia que apesar dessa técnica ter se tornado pública através do Rasmus, ela foi criada mesmo pelo Stig Bakken