18 julho 2010

5 dicas para Certificação Zend PHP 5

Após quase um ano da compra do voucher, eu (Otávio Calaça) finalmente tive tempo para poder fazer a tão temida prova da Zend PHP 5 Certification. Para minha surpresa e felicidade, consegui passar e agora posso ser chamado de Zend Certified Engineer... rsrs. Como é sempre bom ver a comunidade PHP crescer e se profissionalizar, aqui vão 5 dicas para quem está estudando ou pretende ser um ZCE:


  • Compre os testes oferecidos pela Zend. Os testes foram muito importantes nos meus estudos para avaliar quais eram os meus pontos fortes e fracos. A partir deles, por exemplo, descobri que precisava estudar mais sobre sockets e streams. Entretanto, a Zend só oferece um pacote com 10 testes. Para o estudo, não são necessários mais do que 5 testes. Então, o ideal é dividir os testes com algum amigo também interessado em fazer a prova. Só faça a prova quando tiver excellent em quase todos os itens do teste.


  • Estude o Zend PHP 5 Certification Study Guide por completo, mas não somente ele. O guia para certificação PHP 5 é muito bom para saber o que pode cair na prova. Entretanto, considero-o insuficiente. Estude também pelo manual do PHP, principalmente as funções de array, string e streams. Uma coisa chata que caiu, mesmo que indiretamente, foi a ordem de parâmetros em funções.


  • Não estude apenas PHP. Apesar de a certificação ser de PHP, é de engenheiro. Isso significa que cai questões sobre bancos de dados, sistemas operacionais, servidores web, protocolos, projeto e segurança. Os bancos de dados que caíram para mim foram MySQL, SQLite e PostgreSQL. Entretanto, cai questões genéricas sobre SQL, DDL e segurança em DB. Em relação a servidores, caíram algumas questões sobre configuração do apache, sobre o protocolo HTTP e SSL. Padrões de projeto é uma parte delicada. Os que caíram nos testes e na prova foram os que estão no guia. Entretanto, é necessário consultar outras fontes. Um bom livro de design patterns é o PHP objects, patterns, and practice por Matt Zandstra. Para segurança, creio que o TOP 10 da OWASP seja suficiente.


  • Ter inglês de intermediário pra cima. Uma das coisas que pesou em algumas questões de enunciado mais complexo foi o conhecimento da língua inglesa. A Person Vue disponibiliza o teste em outras línguas (português não). Entretanto, creio que o inglês seja a melhor delas.


  • Tenha calma e não estude até horas antes da prova. Ficar nervoso ou ansioso só complica as ideias. Como em qualquer prova, não estude até o último momento, reserve um ou dois dias antes da prova para descansar.



Antes da prova eu fiz 3 testes, porem só guardei o primeiro e o último. O primeiro eu fiz antes de estudar, para ver como estava meu conhecimento. Notei que haviam 6 tópicos que eu precisava estudar.No último consegui melhorar 2 itens, entretanto continuei levando fail em design. Provavelmente pelas questões subjetivas, que são mais comuns no tema design.
Espero que essas dicas possam ajudar vocês e boa sorte!

22 fevereiro 2010

Desabilitando o register_globals em tempo de execução

A diretiva register_globals há muito tempo é condenada pelos desenvolvedores mais experientes por possibilitar uma falha de segurança. Com essa configuração ativada, todas as variáveis contidas em $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER são automaticamente convertidas em variáveis do PHP.

Por exemplo ao acessar http://localhost/arquivo.php?variavel=teste, se o servidor estiver configurado com register_globals = On, no script arquivo.php, haverá uma variável chamada $variavel, que terá o valor 'teste'. Isso pode ser uma falha de segurança pois um atacante pode infiltrar códigos maliciosos em variáveis que não deveriam vir das fontes carregadas pelo register_globals.
Para piorar, no PHP 6 essa configuração não irá mais existir. Ou seja, se você utiliza register_globals em seu código, certamente terá que fazer alterações ao atualizar a versão.

Sabemos que no PHP algumas diretivas definidas no php.ini podem ser alteradas em tempo de execução através da função ini_set().
Porém a diretiva register_globals não pode ser desabilitada em tempo de execução.

Portanto há 2 maneiras de desabilitar essa configuração
1 - Alterar o php.ini, alterando a diretiva register_globals para Off
2 - Criando um arquivo .htaccess no servidor alterando essa configuração para Off

Porém, como nem tudo são flores, há situações na qual não temos acesso a essas configurações do servidor. Para essas situações há uma maneira simples de garantir que as variáveis passadas por $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER não serão transformadas em variáveis PHP.

No início do programa adicione as seguintes linhas:

foreach ($_ENV as $key => $value)
unset($$key);
foreach ($_GET as $key => $value)
unset($$key);
foreach ($_POST as $key => $value)
unset($$key);
foreach ($_COOKIE as $key => $value)
unset($$key);
foreach ($_SERVER as $key => $value)
unset($$key);

Fazendo isso você, antes de iniciar o desenvolvimento, está limpando as variáveis carregadas automaticamente.
Desta forma o desenvolvedor fica impossibilitado de utilizar as "vantagens" de register_globals e garante que o código será compatível com a nova versão do PHP.

Obs.: As variáveis ainda poderão ser acessadas normalmente pelos arrays superglobais do PHP $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER

Obs.: Lembrando que essa técnica nada mais é que um Recurso Técnico Improvisado(Workaround, Gambiarra, Quebra-Galho...), mas que funciona!

16 dezembro 2009

O GOPHP Conference 2009 foi um sucesso!


O evento aconteceu no dia 12/12/2009 no SENAI em Goiânia e contou com mais de 100 congressistas.

Foram diversas palestras e minicursos nos quais os congressistas tiveram a oportunidade de adquirir conhecimento acerca de novas tecnologias e metodologias.

Durante os dois coffee breaks os participantes saborearam salgadinhos e refrigerantes, além de praticar o networking.
Ainda durante os coffe breaks, os congressistas puderam tirar dúvidas e conhecer outros grupos de usuários que estavam em hacklabs. Os seguintes grupos de usuários participaram do evento:
- GOJava
- RubyGO
- Debian-GO
- Ubuntu-GO
- Mulheres na Tecnologia
- Goiaba Digital

No final do dia tivemos uma mesa redonda bastante produtiva sobre o Mercado de Trabalho PHP com a participação do Pablo Dall'Oglio, Otávio Calaça e Eduardo Neves(eth0).

Ainda tivemos o sorteio de várias camisetas, descontos em cursos e outros brindes no encerramento do evento. Todos os congressistas ganharam um adesivo do GOPHP e um chaveiro do elePHPant!

Como o evento foi realizado com o objetivo de comemorar o aniversário de 2 anos do GOPHP, não poderia faltar um bolo de aniversário!
No final do evento os congressistas se reuniram para cantar parabéns para o GOPHP e saborear o delicioso bolo!

Para finalizar com chave de ouro, alguns congressistas e palestrantes foram a um restaurante para uma confraternização.

Foi interessante perceber a grande participação feminina no evento e a presença de várias pessoas do interior de Goiás, do Distrito Federal, Minas Gerais e Tocantins.

As fotos do evento podem ser visualizadas nos links abaixo:
- http://www.flickr.com/photos/45617268@N04/
- http://picasaweb.google.com/fernandopedro/GOPHPConference

A organização do GOPHP Conference 2009 agradeçe todos os patrocinadores, grupos de usuários, palestrantes e congressistas pelo inesquecível evento, e garante que em 2010 um evento ainda maior virá!

04 novembro 2009

Abertas as Chamadas de Trabalho para o GOPHP Conference 2009


É com muito orgulho que apresento a vocês o GOPHP Conference 2009 - http://www.gophp.com.br/conf

O evento será realizado no dia 12/12/09 no SENAI em Goiânia. Serão 12 palestras e 4 minicursos de 4 horas cada um.
Teremos à disposição um auditório, um anfiteatro e dois laboratórios.

O melhor vem agora. Já acertamos com 4 palestrantes convidados que tem grande renome no mundo do PHP.
1 - Guilherme Blanco, desenvolvedor do Doctrine, também é desenvolvedor do núcleo do PHP, Zend Framework e Symfony.
2 - Pablo Dall'Oglio, criador da comunidade PHP-GTK Brasil, é autor de dois livros sobre PHP, com GTK e Orientação a Objetos
3 - Adler Medrado, único brasileiro certificado Zend Framework, também é certificado ZCE e professor de PHP
4 - Eduardo Neves(eth0), colaborador do projeto OWASP, é pesquisador na área de segurança web.

Esses convidados vão ministrar palestras e minicursos sobre os assuntos que são especialistas.
Além disso o evento irá fornecer 2 cofee breaks para os congressistas.

As chamadas de trabalhos estão abertas. Quem quiser ter o privilégio de palestrar ao lado desses feras do PHP não perca tempo e se cadastre no site http://www.gophp.com.br/conf

Obs.: sigam em @GOPHPConf

07 outubro 2009

Como forçar a "declaração" de variáveis no PHP

Após uma discussão no GOPHP sobre declaração obrigatória de variáveis, iniciada pelo Ole Peter Smith, surgiram algumas maneiras de "driblar" essa liberdade que o PHP proporciona de não ser necessário declarar variáveis.

Todos sabemos que no PHP não é possível declarar uma variável, porém é possível inicializar uma variável com um determinado valor.
Quando tentamos utilizar uma variável que não foi inicializada, o PHP retorna um erro do tipo Notice. Como vários servidores não exibem os erros do tipo Notice, através do código abaixo é possível fazer com que esse erro seja tratado como um Fatal Error, que vai finalizar a execução do script.

A vantagem dessa alteração é aumentar o controle sobre as variáveis utilizadas no programa e evitar possíveis erros de execução.

Segue o código:

function newErrorHandler($error, $message)
{
if($error == 8)
{
trigger_error($message, E_USER_ERROR);
}

return false;
}

set_error_handler("newErrorHandler");

$novaVariavel = $variavelInexistente;



Além dessa maneira, quando trabalhamos com encapsulamento, podemos utilizar funções que testam o tipo da variável para garantir que o valor de um atributo será de um determinado tipo. Esse teste pode ser feito tanto para tipos primitivos quanto para tipos criados pelo usuário ou arrays.

class Pessoa
{
private $id;
private $nome;
private $tipo;
private $listaTelefone;

public function setId($id)
{
if(is_integer($id))
$this->id = $id;
else
throw new Exception('O atributo ID deve ser numérico.');
}

public function setNome($nome)
{
if(is_string($nome))
$this->nome = $nome;
else
throw new Exception('O atributo NOME deve ser uma string.');
}

public function setTipo($tipo)
{
if($tipo instanceof PessoaFisica)
$this->tipo = $tipo;
else
throw new Exception('O atributo TIPO deve ser um objeto da classe PessoaFisica.');
}

public function setListaTelefone($listaTelefone)
{
if(is_array($listaTelefone))
$this->listaTelefone = $listaTelefone;
else
throw new Exception('O atributo LISTA TELEFONE deve ser um array.');
}
}


Outros detalhes interessantes surgiram no decorrer desse tópico e que muitos desenvolvedores podem não saber da possibilidade, como por exemplo definir explicitamente o tipo de dados que uma função pode receber como parâmetro.

function calculaSalario(Array $empregados)
{
// código
}

Dessa maneira a função calculaSalario() somente irá aceitar uma variável que seja do tipo Array. Lembrando que não é possível utilizar tipos primitivos para essa funcionalidade, porém é possível utilizar tipos criados pelo usuário através de classes.

20 maio 2009

Nova logo para o POOMAX

Bom, o POOMAX anda meio parado, por falta de tempo de seus mantedores (eu e o Almir). Mas, na tentativa de reanimar o blog, nada melhor que uma logo mais animada e divertida...



A logo anterior eu tinha feito no GIMP quando ainda não conhecia o Inkscape. Gostei muito desse Inkscape, bem simples de usar e para fazer desenhos e logos ele é ótimo. Vale a pena dar uma conferida...



Não posso deixar de fazer agradecimentos ao designer Marquinhos (Marcos Antonio), que deu um toque profissional na nova logo. Valeu Marquinhos, é sempre bom poder contar com você!



Espero que gostem da nova logo!

06 abril 2009

II Seminário de Informática no CEPSS

O CEPSS estará promovendo a semana da informática e quem quiser participar basta se cadastrar no link:

O Almir estará no evento representando o GOPHP e o POOMAX com a palestra Por que a Wikipédia, Yahoo e Facebook usam PHP?


A programação inteira do evento encontra-se no site:

http://www.cepss.com.br/insc.php

O evento será nos dias 16 e 17 de abril, a partir das 19:00h.

O CEPSS fica na Av. Alexandre de Morais, 450 esquina com Av. Maria Cardoso, próximo ao Buriti Shopping, Parque Amazônia em Goiânia - GO. Fone (62) 3548-3300 - 3548-3301

É importante fazer inscrição pelo site para poder pegar o certificado.