Falta pouco para a ZCE

Olá pessoal, este é um post de muita alegria (hehe).

Faz 4 semanas que eu estou na luta para me tornar um Zend Certified Engineer. Dos 10 simulados que eu comprei no zend shop este é o resultado no meu quinto simulado. Confesso que no começo apanhei um pouco. Tem muita coisa que o exame cobra que é decoreba. Só o dia-a-dia com PHP para te ensinar certas coisas.

No meu quinto simulado esta é a primeira vez que eu tiro excellent em todos os tópicos do exame. Agradeço a todos os que me ajudaram nesta fase de estudo, principalmente Fernando Mantoan, Felipe Ribeiro e Jaydson Gomes. – Vocês são foda!

Vou divulgar aqui para vocês os materiais que me ajudaram para a prova da ZCE:

  1. ZEND PHP5 Certification Study Guide (PDF)
  2. Passing the Zend php 5 certification exam
  3. Strings And Regular Expressions
  4. Streams And Network
  5. XML & Web Service
  6. Web Programming & Web Features
  7. Database & SQL
  8. Security
  9. PHP 4 & PHP 5
  10. Object Oriented Programming in PHP 5
  11. Object Oriented Programming: Design & Theory
  12. Zend PHP5 certification Exam study review 10: Supplementary I
  13. Zend PHP5 certification Exam study review 10: Supplementary II
  14. Zend PHP5 certification Exam study review 10: Supplementary III
  15. php.net
  16. Google.com

Zend Certified Engineer, Vamos?

Arrumei dinheiro. Tomei vergonha na cara. Certificações é sempre um assunto que gera bastante polêmica. Sempre que falamos sobre o assunto, tem sempre alguém que declara guerra e não para de falar sem parar os motivos pelos quais ele despreza as certificações. Não tiro a razão de ninguém.

Mas eu tenho um pensamento que vocês deveriam refletir. Não falo isso generalizando as certificações, estou falando da ZCE.

Minha mensagem é especificamente para as pessoas que amam o PHP assim como eu. Pessoas que realmente levam a sua filosofia e a sua comunidade a sério. Se você não faz a certificação por que tem raiva do mundo, então faça pelo PHP. Quanto mais de nós, profissionais, nos comprometermos com o meio em que trabalhamos, mais informal este mercado deixa de ser e mais ele passa a ser levado a sério.

Eu particularmente quero tirar esta certificação para me testar, ver como eu estou (oficialmente) na linguagem e claro é uma boa oportunidade para aprimorar os conhecimentos, estudar mais e quem sabe isso possa me trazer sorte (rs).

Tirar a certificação este ano não estava nos meus planos. Este ano era para eu ter iniciado a minha pós-graduação em Engenharia de Software, porém, não estou tendo condições financeiras de pagar o curso este ano.  Sem grana, resolvi adiantar a certificação e inverter as metas.

Este ano “vou” me certificar pela Zend. Já comprei o Zend PHP 5 Certification Bundle, recebi todo o material e agora é só cair de cara nos livros e me preparar para o exame final que pretendo fazer daqui um ou dois meses.

Se você tem interesse em se certificar vai aqui algumas informações que podem te acrescentar algo:

  • Você pode pagar a certificação com qualquer cartão de crédio internacional Visa/MasterCard, PayPal ou Transferência Bancária.
  • Material, simulados e a prova final é em inglês.
  • Os simulados são dados pela php|architect.
  • Os simulados, em teoria são mais difíceis do que a prova oficial.
  • Se você vai bem nos simulados, você vai bem no exame.
  • São 80 questões e você tem 90 minutos para responder (simulado e exame final).
  • O investimento total sai por 165,00 dolares.
  • A prova é bem detalhista. Se você pensa que a parte chata (bitwise operators, manipulação de números exponenciais, hexadecimais e octais por exemplo) não cai, você está enganado.
  • Prepare-se para decorar nome de funções e suas derivadas.
  • Os simulados são online.
  • O exame é aplicado somente em centros habilitados pela Zend.
  • Existem milhares centros espalhados pelo globo (inclusive no brasil).
  • Se você falhar no exame final, não se preocupe, a Zend oferece descontos para uma próxima prova (que eu pretendo não descobrir qual é).

Me desejem sorte 🙂

Igor
[]’s

Javascript: OnUnload VS OnBeforeUnload

Fico pensando em um caso mais familiar possível para ilustrar a utilidade das duas funções, e a melhor que me vem à cabeça é o Gmail. Já pensou em fazer algo parecido com o Gmail? Quando o usuário fechar a janela e alguma requisição estiver em processamento, ele dá um aviso sobre ela, para evitar que você perca alguma alteração.

Muita gente pensa que o evento utilizado para fazer tal proeza é o evento “onunload” mas não é. Existe uma pequena diferença entre os dois eventos.

O evento OnUnload

O evento OnUnload em sua tradução quer dizer: “quando descarregar”. Ele é responsável por executar uma instrução quando a página for fechada, mas CUIDADO!. A utilização deste evento não é muito confiável quando se trata de navegadores como Internet Explorer e AJAX ao mesmo tempo. Quando o IE está de mal humor e simplesmente ignora o evento, não executando a instrução que você programou para ele fazer. Se a instrução envolver AJAX, ela está ainda mais fadada ao fracasso e o seu usuário provavelmente vai ficar muito triste.

Exemplo
[javascript]
<script language="JavaScript">
window.onunload = Sair;
function Sair()
{
return "A página foi fechada";
}
</script>
[/javascript]

O evento OnBeforeUnload

Traduzindo OnBeforeUnload para o português, quer dizer: Antes de descarregar. O evento OnBeforeUnload funciona um pouco diferente do OnUnload. O evento OnBeforeUnload é chamado ANTES da janela ser fechada. É mais eficiente, pois ele não é executado em concorrência (junto/ao mesmo tempo) com o fechamento da janela, o que pode fazer com que algo seja carregado pela metade (de forma interminada).

Exemplo
[javascript]
<script language="JavaScript">
window.onbeforeunload = ConfirmExit;
function ConfirmExit()
{
//Pode se utilizar um window.confirm aqui também…
return "Mensagem de fechamento de janela….";
}
</script>
[/javascript]

Pesquisando sobre este evento eu notei que o jQuery não da suporte ao eventoOnBeforeUnload. Se alguém descobrir por que, ganha um doce. x)

[]’s

PHP Conference Brasil 2010

O PHPSP está responsável pelo conteúdo do evento, por isso, disponibilizamos a todos um lugar onde qualquer pessoa pode se registrar e cadastrar seus palestras de maneira simples, rápida e fácil. Tentamos simplificar todo o processo da melhor forma possível, mas se você tiver alguma crítica/sugestão ficaremos felizes em poder atendê-las  se possível.

Mas o que é a chamada de trabalhos?

A chamada de trabalhos é um período em que todos que estiverem interessados em palestrar no evento, possam enviar suas propostas de palestra. Você não precisa ser um expert, ou ter palestrado em algum evento. Como o público da PHP Conference Brasil é grande, tenha certeza de que o assunto que você se sente seguro para abordar, será apreciado pelas pessoas. Então não se acanhe, envie sua proposta de palestra! Seja ela uma abordagem simples para quem está começando, um caso de uso da linguagem ou alguma nova ferramenta. Nos envie! Você não tem nada a perder, muito pelo contrário!

O que eu ganho caso minha palestra seja escolhida?

Você tem uma entrada gratuita para o evento, nos dois dias de palestras e caso sua palestra seja escolhida e você esteja em outros estados; a organização do evento custeia sua passagem e hospedagem. Existe jeito melhor de ir a um evento?!

Como serão escolhidas as palestras?

Simples: serão escolhidas por vocês! Ao fecharmos a chamada de trabalho ninguém mais vai poder enviar palestras, aí começamos um período de avaliação, e vocês serão os avaliadores. Ninguém vai saber quem vai dar a palestra, o objeto de avaliação será somente a palestra e no evento entrarão as palestras que contiverem as melhores avaliações, ou seja: as palestras que vocês querem ver!

Ok, quero enviar minhas palestras !

Sim, envie mais de uma! Quanto mais palestras você enviar, mais chances de participar do evento!

Para enviar sua palestra simplesmente acesse e se cadastre: http://www.phpconf.com.br/cfp

Fonte: http://phpsp.org.br/?p=1262

5º Seminário PHP

Em sua 5ª edição temos um evento voltado tanto para Desenvolvedores como para Coordenadores e Gerentes. O evento começa as 9:00, no mesmo local da 4ª edição, Century Flat Paulista – R. Teixeira da Silva, 647 – Paraíso.

Público Alvo: Desenvolvedores PHP, sobretudo aqueles que procuram se profissionalizar, Coordenadores e Gerente de Projetos.

Objetivo: Incentivar a formação de pessoas para o mercado corporativo, a fim de construir aplicações e portais mais sólidos e escaláveis de forma eficiente.

Com 5 palestras e 4 palestrantes bem conhecidos na comunidade, abordaremos temas atuais e o que eles podem ajudar no desenvolvimento de aplicação estáveis e de simple manutenção.

Pela primeira vez, Cal Evans no Brasil!

Em uma palestra focada em gerentes de desenvolvimento, Cal Evans evangelista PHP,  fala sobre como um gerente pode aprender com a comunidade Open Source e motivar os desenvolvedores possibilitando novos desafios, crescimento e inovação! Além disso, Cal tomará mais uma vez o pódio focando nos desenvolvedores e falando sobre Flash Builder4 e PHP, em uma sessão de live coding!

Rafael Dohms foca as vantagens de Test Driven Development e porque isso é bom a longo e curto prazo e como isso pode trazer produtividade e confiança ao seu time.

Guilherme Blanco mostra a versão 2.0 do Doctrine, o maior ORM de PHP. Usando todas as vantagens do PHP 5.3 esta nova versão tem um grande potencial para aumentar ainda mais a produtividade de seu time.

Augusto Pascutti irá falar sobre os bancos de dados não relacionais (NoSQL) que estão surgindo. Suas aplicações, como funcionam e o suporte deles nas versões atuais do PHP.

Todas as palestras possuem uma mescla de gerência e desenvolvimento, sendo assim palestras muito úteis para gerentes que queiram levar seu time ao próximo nível, de qualidade e agilidade, ou para desenvolvedores que queira facilitar seu trabalho do dia a dia e trazer ainda mais produtividade.

Após as palestras teremos uma mesa redonda para discutir os mais diversos assunto e depois, para os que aguentarem, teremos o #phpinga para jogar papo fora e, claro, falar de PHP de um jeito mais descontraído.

Já se inscreveu? Não esqueça de se cadastrar no joind.in http://joind.in/event/view/391 para comentar as palestras e obter os slides posteriormente.

Increva-se já pois as vagas são limitadas

Detectando o iPad com PHP e Javascript

Não me pergunte como, não me pergunte o por quê mas o Steve Jobs conseguiu mais uma vez. Tudo começou com rumores de perda de tempo, ele não vai conseguir e bla bla e no final das contas a poeira abaixou e o iPad foi lançado no dia 3 de abril. Logo após o final de semana de seu lançamento oficial, 700 mil iPads foram vendidos só nos Estados Unidos.

Sendo assim, é importante saber identificar estes dispositivos para conseguirmos otimizar nossos serviços para que nos possibilite atingir uma nova fatia de mercado, dando origem a novos negócios e oportunidades.

O novo iPad da Apple é identificado pelo seguinte User Agent:

Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10

Sabendo como os novos iPads são identificados aqui vão algumas soluções para que vocês possam identificá-los e fazer suas versões dedicadas a partir daí:

Detectando iPad com PHP

[php]
$isiPad = (bool) strpos($_SERVER[‘HTTP_USER_AGENT’],’iPad’);
[/php]

Detectando iPad com Javascript

[javascript]
var isiPad = navigator.userAgent.match(/iPad/i) != null;
[/javascript]

Detectando o iPad com .htaccess

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.seudominio.com [R=301]

Espero que ajude!
[]’s

Bitly-PHP – Lançada a versão 1.2

Olá pessoal!

[php]

$easter = ‘Páscoa’;
echo sprinf("Feliz %s ! astrasado =(" , $Easter);

[/php]

Semana passada falei um pouco sobre o meu novo projeto open-source, o Bitly-PHP. Para quem ainda não sabe, o Bitly-PHP é uma nova forma de você interagir com a API RESTful do Bitly. A library permite que você encurte, descubra a url longa, receba informações e estatísticas completas sobre um link encurtado.

Sobre a versão 1.2

Depois do dia em que lancei a primeira versão do Bitly-PHP. Comecei a ouvir a comunidade PHP. Abri tópicos em listas e pedindo por sugestões. O feedback da comunidade foi muito bom. As pessoas realmente gostaram do que viram e o resultado foi isso que estamos vendo agora. A versão 1.2 do Bitly-PHP.

O que mudou?

Para os que estão utilizando desde primeira versão, não se preocupe. Se você baixar a nova versão o seu código continuará funcionando. Todas as alterações foram levando em conta as pessoas que já estavam utilizando.

Na versão 1.0 para você encurtar uma url você podia fazer da seguinte forma:

[php]
<?php
$bitlyphp = new Bitly();
$bitlyphp->login = ‘<your_login>’;
$bitlyphp->api_key = ‘<your_api_key>’;
$bitlyphp->url = ‘http://blog.igorescobar.com&#8217;;
$bitlyphp->shorten();
echo $bitlyphp->getData()->shortUrl; // Imprime a url encurtada.
?>
[/php]

Na versão 1.2 você pode reduzir estas linhas para duas.

[php]
<?php
$bitlyphp = new Bitly( ‘<your_login>’, ‘<your_api_key>’);
echo $bitlyphp->shorten(‘http://blog.igorescobar.com&#8217;); // Imprime a url encurtada.
?>
[/php]

Mais prático, não?

As parâmetros mais básicos e obvios foram encapsulados dentro do próprio método reduzindo o tempo gasto para o usuário que queria fazer algo que não fuga do simples “encurtar urls”.

Mas o método:

[php]
print_r( $bitlyphp->getData() );
[/php]

Continua valendo caso você queira acessar um dado mais específico.

O que mais mudou?

  • Agora Bitly-PHP está também, disponível no PHP Classes.
  • Todos os comentários dentro da library do Bitly-PHP foram re-escritos em inglês.
  • Todos os exemplos dados na Wiki do Bitly-PHP foram re-escritos e simplificados para as alterações que vieram com a versão 1.2.
  • 2 bugs foram corrigidos.

Encurtando URLs com o Bitly-PHP

Sobre o Bitly-PHP

Nos últimos dias tenho trabalhado em uma library em PHP (claro) para abstrair as funcionalidades da API RESTful do Bit.ly . Se chama Bitly-PHP. Toda a library foi desenvolvida utilizando PHP5, Orientação a Objetos, Naming Convention e cURL (se não tiver ele usa uma função alternativa).

Download e Documentação

Você pode fazer o download da library direto na pagina do Bitly-PHP no GitHub. Todos os outros exemplos de uso da library você encontra direto no Wiki do Bitly-PHP.

Se você tem o git na sua máquina você pode executar o comando:

[php]git clone git://github.com/igorescobar/Bitly-PHP.git[/php]

Encurtando URLs

O primeiro que você deve fazer é incluir a arquivo que contém a library do Bitly-PHP:
[php]
include_once("Bitly-PHP/bitly.php");
[/php]

Depois é muito simples. Você só precisa instanciar o objeto do Bitly PHP, informar a URL que quer encurtar, invocar o método responsável por encurtar as URLs, o shorten.

[php]
include_once("Bitly-PHP/bitly.php");
$bitly = new Bitly();
$bitly->url = ‘http://www.google.com/&#8217;;
$bitly->shorten();
[/php]

O Bitly-PHP possuí um método responsável por acessar os dados que a API do Bit.ly retorna chamado getData().

[php]
include_once("Bitly-PHP/bitly.php");
$bitly = new Bitly();
$bitly->url = ‘http://www.google.com/&#8217;;
$bitly->shorten();
$bitly->getData()->shortUrl; // Saída: http://bit.ly/b6R4Uf
[/php]

Se você não sabe qual o nome do parametro que você quer chamar, chame o metodo debug():

[php]
include_once("Bitly-PHP/bitly.php");
$bitly = new Bitly();
$bitly->url = ‘http://www.google.com/&#8217;;
$bitly->shorten();
$bitly->debug();
[/php]

O debug vai mostrar:

[php]
{
"errorCode": 0,
"errorMessage": "",
"results": {
"http://www.google.com/&quot;: {
"hash": "2V6CFi",
"shortCNAMEUrl": "http://bit.ly/b6R4Uf&quot;,
"shortKeywordUrl": "",
"shortUrl": "http://bit.ly/b6R4Uf&quot;,
"userHash": "b6R4Uf"
}
},
"statusCode": "OK"
}
[/php]

É isso!

[]’s

Tutorial jQuery – Método $.live();

Hoje vou falar sobre um método do jQuery muito útil, muito mesmo. Mais informações em inglês pode ser encontrada na documentação oficial do método .live().

O Problema

É muito comum quando estamos desenvolvendo aplicações para Internet e precisamos criar ferramentas tão dinâmicas que acabamos por utilizarmos quase todo o potencial que o JavaScript dispõe a oferecer. Nas ferramentas que desenvolvo é muito comum a interface da ferramenta ser controlada e alterada quase que o tempo todo através da manipulacão do DOM e muitas vezes precisamos atachar comportamentos em um determinado elemento da página.

Por exemplo: Temos um sistema de comentários onde todos os comentários são carregados e as respostas destes comentários aparecem como arvore.

  • Comentário 1
  • Comentário 2
    • Resposta do comentário 2
      • Resposta da resposta do comentário 2
  • Comentário 3

E assim vai…

Eu posso responder em tempo real um comentário e ele ja vai aparecer para mim. Tudo via jQuery. Quando fazemos uma varredura no DOM do documento usando os seletores do jQuery, procuramos por todos os botões que tenha a classe “responder” que originalmente ficam sem ação e depois, via jQuery damos ação ao elemento.

[javascript]
$(‘.responder’).bind(‘click’, function() {
// instruções
});
[/javascript]

Neste ponto, temos um problema. O indice de elementos do jQuery é estático, ele não atualiza automaticamente. Se um novo botão responder surgir na tela o jQuery não surtirá efeito sobre ele, pois ele apareceu DEPOIS da primeira varredura no DOM quando eu usei o seletor $(‘.responder’).

Solução

Para corrigir este problema, podemos utilizar o .live() do jQuery. Independente de quando e a quantidade de botões que surgirem na tela o jQuery irá acrescenta-lo em seu índice e você poderá manipula-lo da forma como quiser.

[javascript]
$(‘.responder’).live(‘click’, function() {
// instruções
});
[/javascript]

Caso queira adicionar ao DOM o mesmo comportamento em mais de um evento, basta fazer o seguinte:

[javascript]
$(‘.responder’).live(‘mouseover mouseout’, function(event) {
if (event.type == ‘mouseover’) {
// faça isso
} else {
// faça aquilo
}
});
[/javascript]

Ou crie 2 lives separadamente para cada evento.

[javascript]
$(‘.responder’).live(‘mouseover’, function() {
// instruções
});
$(‘.responder’).live(‘mouseout’, function() {
// instruções
});
[/javascript]

A princípio o conceito pode ser um pouco confuso. Fica difícil de entender isso quando nunca se passou pelo problema. O dia que algo não funcionar como o esperado pelo jQuery nem simplesmente ter sido chamado, lembre-se do $.live();

Igor
[]’s

Novo ano, nova jornada.

É isso aí! Ano novo, nova jornada!

Antes do ano de 2009 acabar eu já observava indícios de que minha vida estava prestes a mudar. Fui Analista de Sistemas da Visie durante 2 anos. Sou de São José dos Campos e fui contratado pelo Elcio Ferreira no início de 2008 para trabalhar em São Paulo – Capital alocado em um cliente da Visie no centro de São Paulo.

Trabalhei quase 2 anos em um projeto para a ACSP (Associação Comercial de São Paulo) que iria substituir o atual sistema de proteção ao crédito da empresa (o famoso SPC). Neste período eu aprendi bastante. Tive a oportunidade de conhecer pessoas incríveis, que realmente mudaram minha vida diretamente e indiretamente.

Quando o projeto foi chegando ao fim o Elcio não achava mais necessário a minha presença no projeto e achou que eu seria mais útil na matriz da Visie em São Judas. Fui para lá e foi ótimo! conheci um novo modelo de trabalho, pessoas incríveis. Adoro trabalhar em um lugar onde as pessoas são apaixonadas pelo que fazem. A realmente sentirei falta de trabalhar para Visie.

O início de 2010 foi quente para mim. Recebi muitas propostas de emprego neste período, a maioria para sobrinhos faz tudo (#sick) e algumas interessantes. Uma delas foi a oportunidade de trabalhar no Virgula. Fui chamado para entrevista, gostei muito do lugar e pelo que conversamos a equipe também é promissora. Lá eu fiz um teste. Um simulado oficial da Zend (in english) para testar os conhecimentos. Três dias depois eu fui comunicado de que havia sido selecionado para a vaga.

Hoje, dia 16 de março de 2010. Eu encerro a minha jornada como membro da Visie e inicio uma brand new como parte da equipe do Virgula.

Que venha o Virgula, então!

Igor
[]’s