geeklist-php 0.1 lançado

You can see this post in english too.

Olá!

Eu gostaria de lhe apresentar geeklist-php. Esta biblioteca LGPL é capaz de retornar o conteúdo dos “Cards” de um username da rede social Geekli.st e retorná-los como uma string JSON ou um array simples para você. O truque desta lib é que ela não requer uma API do Geeklist para funcionar.

A intenção é que ela seja 100% aderente aos recentes padrões PSR-[0|1|2], traz um autoloader para tornar o trabalho com ela mais simples, e está pronta para usar com o Composer. Simplesmente adicione no composer.json de seu projeto:

{
   "require": {
   "arglbr/geeklist-php": "dev-master"
   }
}

Pegue-a, faça fork, use-a, melhore-a! À primeira vista, pode-se notar a falta de PHPDoc no código.

🙂

Até!

geeklist-php 0.1 released

You can see this post in portuguese too.

Hey!

I’d like to present you geeklist-php. This LGPL library is able to fetch cards content of a given/valid username on Geekli.st social network, and return them as a JSON or simple array for you. The trick in this library is it does not require an API key from Geeklist.

It intends to be PSR-[0|1|2] compatible, brings an autoloader to make the work easier, and is ready-to-use with Composer. Simply add in the composer.json of your project:
{
   "require": {
   "arglbr/geeklist-php": "dev-master"
   }
}

Get it, fork it, use it, improve it! On the first sight, is possible to notice lack of phpdoc on the code.

🙂

Cheers!

ZCE 5.3 – Certificação Zend: Minha feliz experiência

You can see this post into english too.

Todos ficaram sabendo que obtive a certificação da Zend (ZCE 5.3). Fiquei bastante feliz com o resultado e com as congratulações recebidas, obrigado gente.

Aplausos!
Aplausos!

Deixarei aqui minha impressão sobre a prova, e sobre o que fiz para obter a certificação.

A PROVA

  • Fique calmo, a prova nem é tão difícil! Acho que o único ponto importante é que você deve ser um programador PHP, utilizá-lo no dia-a-dia, e de alguma forma (seja no trabalho ou em seus projetos pessoais) estar em contato com itens como closures, namespaces e OOP;
  • Não deixe questões em branco! Segundo o próprio pessoal da Zend, é melhor errar do que deixar de responder;
  • Com certeza a prova irá além do dia-a-dia da grande maioria dos programadores PHP. Então estude. Matemática binária / hexadecimal / octal é uma ótima pedida;
  • O teste para a versão 5.3 removeu todas as questões referentes às diferenças entre PHP 4 e 5. Então não perca tempo estudando-as;
  • O teste é cheio de armadilhas, coisas como:
    <?php
    $a = function($var)
    {
       $b = "Hello $var";
       return $b;
    }
    $c = $a('Adriano');
    print $c;
    ?>
    são normais. E se acha que este código imprime ‘Hello Adriano’, você tem um problema… rs…;
  • Faça várias leituras nas páginas String functions e Array functions, isso lhe garantirá uns pontos extras na prova;
  • Serão aproximadamente um minuto e 14 segundos por questão. Ganhe tempo lendo as questões conceituais somente uma vez. Utilize o recurso de “flag” que a prova disponibiliza para retornar à questão mais tarde;
  • Você terá um ano para realizar a prova após confirmar a compra do voucher. É bastante tempo, por isso sugiro que faça a compra e marque a prova para forçar-lhe a estudar com uma data limite definida. Todas as instruções para o processo são bem tranquilas (abrir conta no PearsonVue, etc.), apenas certifique-se de que há um centro PearsonVue próximo para realizar a prova.

O PROCESSO ADOTADO

 
Uma breve introdução: Em 2011 tive um grande susto quando comprei o voucher e abri o livro Zend PHP 5.3 Certification Guide: o PHP vai muito além de quase tudo que tinha lido até então. Decidi que deveria ler e testar muito! Foi quando elegi, adquiri e li os livros contidos no final deste post.

Após ver que tinha muito que estudar, esqueci um pouco a prova e decidi que tinha que explorar o PHP, e foi o que fiz. Li os livros, testava os códigos que me pareciam estranhos, fiz muitas (mas muitas!) anotações, e experimentei muito! Admito que foi a fase mais prazerosa de tudo isso. O website do PHP foi o melhor apêndice/anexo durante a leitura dos livros.

Ler os livros me levou muito tempo. Já quase no fim do ano, juntei todas as anotações e rabiscos nos livros e criei um super resumo, agora já com foco para a certificação. Com o resumo pronto, o li novamente. Os pontos em dúvida foram revisitados. Faltando 5 dias para a prova, separei todas as perguntas do livro guia num PDF, respostas em outro e realizei um simulado, permitindo-me somente um minuto e 14 segundos para responder cada questão, e algo entre 10 e 20 questões por dia. A intenção era buscar um “aquecimento” para a prova.

Entre um livro e outro, ouvi os podcasts do PHPSP (sinto muita falta deles!!). O foco deste podcast é PHP, então há dicas valiosas para quem quer fazer a prova. Embora confesso certo desconforto (popular: cagaço!) quando ouvi que o Rafael Dohms não passou na primeira vez que fez o exame. :-

CONCLUSÕES

 
Após essa mega-operação para obter o “The logo”, vi que exagerei na dose desta vez: estudei além do que realmente precisava, mas veja: hoje em dia me sinto um programador muito, mas muito melhor. Só que longe de onde gostaria estar. 😛

The logo - Zend Certified Engineer (PHP 5.3)
"The logo"

Sou recém certificado então não sei de verdade o que ser “ZCE” me trará de bom. Já tive duas boas notícias: ganhei uma licença de Zend Server e outra de Zend Studio por ter passado na prova. Passei a fazer parte de um grupo exclusivo no Linkedin, onde parece que as discussões melhoram de nível. Minha primeira impressão.

Quanto à empregabilidade, torço um pouco o nariz. Compare com uma certificação da Microsoft: você pode competir por uma vaga com uma pessoa que, como você, possui mais de 10 anos de experiência em sistemas. Se você tem um MCSE e ele/ela não, você está à frente. Mas concluir isso implica que a pessoa que realiza a seleção sabe disso. E é aqui que reside minha preocupação: será que os selecionadores e headhunters conhecem a Zend e suas certificações como sabem da Microsoft? Eu duvido. Então se quer se certificar para obter melhor emprego, minha opinião: não sei se funciona. Na dúvida, faça.

Enfim, estou MUITO feliz.

LEITURA RECOMENDADA

  • [Indispensável] Zend. Zend PHP 5.3 Certification. Zend Technologies. 155 páginas. Sem ISBN;
  • Shafik D, Ramsey B. Zend PHP 5 Certification. Study Guide. php|architect’s. 259 páginas. ISBN: 0-9738621-4-9;
  • Alshanetsky L. Guide to PHP Security. A step-by-step guide to writing secure and reliable PHP applications. php|architect’s. 197 páginas. ISBN: 0-9738621-0-6;
  • Sweat J. Guide to PHP Design Patterns. A practical approach to design patterns for the PHP4 and PHP5 Developer. php|architect’s. 338 páginas. ISBN: 0-9735898-2-5;
  • [Indispensável] Gutmans A, Bakken S, Rethans D. PHP 5 Power Programming. Bruce Perens’ Open Source series. Prentice Hall. 720 páginas. ISBN: 0-131-47149-X
  • [Indispensável] Williams J, Wichers D. OWASP Top 10 – 2010. The ten most critical web application security risks. Aspect, Mitre, Softtek, WhiteHat. 22 páginas. Sem ISBN.

Até 😉

ZCE 5.3 – Zend Certification: My happy experience

Você pode ler este post em português também.

I’m very happy with the result and with the congratulations received, thank you people.

Applause!
Aplausos!

I wrote here my impression about the test, and what I did to get certified.

THE TEST

  • Calm down, take it easy, the test is not so hard! I think the only important point is that you must be a PHP programmer, using it in day to day, and somehow (at work and/or in your personal projects) being in contact with items as closures, namespaces and OOP in general;
  • Do not leave questions empty! According to Zend’s own staff, is better to make mistakes than show indecision;
  • Surely the test will go beyond the day-to-day which the majority of PHP programmers go. So study a lot. Binary / hex / octal math is a great choice;
  • The test for version 5.3 removed the subject “Differences between PHP 4 and 5”. So do not waste your time studying it;
  • The test is full of pitfalls, so some tricks as:
    <?php
    $a = function($var)
    {
       $b = "Hello $var";
       return $b;
    }
    $c = $a('Adriano');
    print $c;
    ?>
    are normal. And if you think this code prints “Hello Adriano” you have a problem… LOL…;
  • Do several readings on Array functions and String functions pages, it will guarantee to you some extra points;
  • There will be approximately one minute and 14 seconds per question. Save time reading the conceptual questions only once. Use the “flag” feature, that allows you to return to a marked question later;
  • You will have one year to perform the test after confirming the purchase of the voucher. It is a long time, so I suggest you make the purchase and schedule the test to force yourself to study with a set deadline. All instructions for the process are very easy (to create an account at PearsonVue, etc.), just make sure that there is a PearsonVue center near to you to perform the test.

THE PROCESS ADOPTED

 
An introduction: In 2011 I had a big scare when I bought the voucher and I opened the book Zend PHP Certification Guide 5.3: PHP is much more than almost anything I had read so far. I decided I should try and read a lot! So I chose, bought and read the books contained at the end of this post.

After seeing that I would have much to study, I forgot the test and I launched a deep PHP exploration. I read the books, I tested the code that seemed weird, I did many (but many!) notes, and I did lots of experiences! I admit it was the coolest stage of this whole thing. The PHP website was the best appendix while reading the books.

The reading of the books took me a long time. Almost at the end of 2011, I put all that notes and scribbles in books together and I created a summary, focused now in ZCE. With the summary ready, I did read it again. The points in doubts were revisited. Five days before the test, I splitted all questions and answers in different PDFs, then I did perform the test as a simulation, allowing me only one minute and 14 seconds to answer each question, doing something between 10 and 20 questions per day. The intention was to do a “warming” towards the test.

Between one and another book, I listened to the PHPSPCast podcasts (only in brazilian portuguese, I miss them!). The focus of this podcast is purely PHP, so there are valuable tips for anyone who wants to get the certification. Although I confess some discomfort when I heard that Rafael Dohms did not pass the first time he performed the exam. :-

CONCLUSIONS

 
After this mega-operation to get the “The logo”, I concluded that I overdid at this time: I studied more than really needed, but look: now I’m a much better programmer than before. And I feel myself far from where I would like to be. 😛

The logo - Zend Certified Engineer (PHP 5.3)
"The logo"

I’m newly certified then I really don’t know what be a “ZCE” will bring to me. But I’ve had good news: I won licenses for Zend Server and Zend Studio with this good result. I became part of an exclusive group on LinkedIn, where the discussions have an improved level. My first impression.

About employability, I twist my nose a little bit. Compare with a Microsoft certification: you can compete for a job position with a person who, like you, has over 10 years of experience in software branch. If you have a MCSE and he/she does not, you are ahead, brother. But this conclusion implies the recruiter which is conducting the selection knows what MCSE is. And here lies my concern: do the recruiters and headhunters know about ZCE as they know about Microsoft certifications? I doubt it. So if you want to get a better job, my opinion: I don’t know if the ZCE will works for it. At doubt, do the exam.

RECOMMENDED READING

  • [Necessary] Zend. Zend PHP 5.3 Certification. Zend Technologies. 155 pages. ISBN unavailable;
  • Shafik D, Ramsey B. Zend PHP 5 Certification. Study Guide. php|architect’s. 259 pages. ISBN: 0-9738621-4-9;
  • Alshanetsky L. Guide to PHP Security. A step-by-step guide to writing secure and reliable PHP applications. php|architect’s. 197 pages. ISBN: 0-9738621-0-6;
  • Sweat J. Guide to PHP Design Patterns. A practical approach to design patterns for the PHP4 and PHP5 Developer. php|architect’s. 338 pages. ISBN: 0-9735898-2-5;
  • [Necessary] Gutmans A, Bakken S, Rethans D. PHP 5 Power Programming. Bruce Perens’ Open Source series. Prentice Hall. 720 pages. ISBN: 0-131-47149-X
  • [Necessary] Williams J, Wichers D. OWASP Top 10 – 2010. The ten most critical web application security risks. Aspect, Mitre, Softtek, WhiteHat. 22 pages. ISBN unavailable.

 
 
See you 😉

Benchmark de métodos de atribuição do PHP

You are able to see this post in english too.

Olá!

Este post mostrará um benchmarking entre as formas de atribuição suportadas pelo PHP:
a) Atribuição simples (ex.: $j = $j + 1);
b) Atribuição com associação à direita (ex.: $j += 1);
c) Atribuição não associativa (ex.: $j++);

O material de teste:

  • Máquina: Dell Optiplex 755;
  • Ambiente: Bash, sem X. Sistema de arquivos Ext4;
  • uname -a:
    Linux optiplex755 2.6.34.8-68.fc13.x86_64 #1 SMP Thu Feb 17 15:03:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

  • php -v:
    PHP 5.3.5 (cli) (built: Jan 7 2011 18:46:32)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

Todos os arquivos do teste podem ser baixados aqui. A metodologia aplicada foi:
1) Desligar a máquina por 1 minuto;
2) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output01.log; done;
3) Desligar a máquina por mais 1 minuto;
4) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output02.log; done;
5) Desligar a máquina novamente, por mais 1 minuto;
6) No bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output03.log; done;

Repetiu-se as ações acima para os arquivos t2.php e t3.php.

Os arquivos t1.php, t2.php e t3.php possuem cada um três arquivos de log com seus tempos de execução. Os 300 resultados de cada script foram então ordenados de forma ascendente pelo tempo de execução e descartou-se os 100 melhores e os 100 piores resultados de cada um, ficando então somente com os 100 melhores tempos médios de execução.

O resultado:

Gráfico - Comparando os tempos de execução
Gráfico - Comparando os tempos de execução

O gráfico mostra que utilizar o método “($j += 1)” ou o método “($j++)” pode lhe render até 0.02 segundo de vantagem, em média.

Alteraremos nosso documento de Coding Standards para que se prefira sempre um dos métodos que levaram vantagem na comparação, economizando ainda mais tempo de processamento.

Benchmarking of attribution methods of PHP

Você pode ler este post em português também.

Hey!!

This post will show you a benchmarking among the attribution ways supported by PHP:

a) Simple attribution (ex.: $j = $j + 1);
b) Right association attribution (ex.: $j += 1);
c) Non-associative attribution (ex.: $j++);

Test material:

  • PC: Dell Optiplex 755;
  • Environment: Bash, without X. Ext4 filesystem;
  • uname -a:
    Linux optiplex755 2.6.34.8-68.fc13.x86_64 #1 SMP Thu Feb 17 15:03:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

  • php -v:
    PHP 5.3.5 (cli) (built: Jan 7 2011 18:46:32)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

All the files used and generated by the test can be downloaded here. The applied methodology follows:
1) Turn off the PC by one minute;
2) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output01.log; done;
3) Turn off the PC by one more minute;
4) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output02.log; done;
5) Turn off the PC again, by one more minute;
6) @ bash: for i in `seq 1 100`; do echo $i && php t1.php >> t1_output03.log; done;

The t1.php, t2.php and t3.php has each one three log files with its execution times. The 300 results of each script got ordered by by its execution time (ascendant way) and throwed out the 100 best and the 100 worst values, giving to us only the 100 best average execution times.

The result:

Graph - Comparing the execution times
Graph - Comparing the execution times

The graph shows that the use of “($j += 1)” or “($j++)” method can give you 0.02 second of advantage, in average.

We are going to modify our Coding Standards documents to preferring one of advantage methods that I have showed in this comparison, saving even more processing time.

Simple assign vs. php_array

Você pode ler este post em português também.

Hello!

The April article was released at May. The May one, will be released at May too? 😉

No more talking. This post compares the performance of each way to assign a value to an array:

  • Simple assign (ex: $a[] = 1);
  • By array_push function (ex: array_push($a, 1));

In PHP website:

array_push: a tip

I think that a performance test of the two ways shows how much better is to free the HEAP area from functions calls. Let’s know the test tools:

  • Computer: Dell Optiplex 755;
  • OS: Fedora GNU/Linux 12, X86_64 architecture;
  • PHP: Version 5.3.2, from Fedora repositories;
  • Environment: Bash, no X. EXT4 file system;
  • File array.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { $a[] = 1; }?>
  • File array_push.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { array_push($a, 1); } ?>

    • Execute each of the PHP scripts 100 times, saving the execution time in each iteration:
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array.php 2>> array.log; done;
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array_push.php 2>> array_push.log; done;
      Obs.:The PC was turned off by 30 seconds between each test.
    • Order the execution times, from smallest to largest;
    • Throw away the 25 first and the 25 last execution times;
    • Plot the 50 remaining results.
  • Method:

    Test results

    Conclusion: Perform a code review changing array_push calls by simple assigns will give you few seconds faster. So do it right now ;-).

    Regards!

Atribuição simples x php_array

You can see this post in english too.

Olá!

O artigo de Abril saiu em Maio. O de Maio, sairá em Maio? 😉

Sem mais conversa. Este post mostra o desempenho das duas formas de se atribuir elementos em um array:

  • Atribuição simples (ex: $a[] = 1);
  • Pela função array_push (ex: array_push($a, 1));

Está lá no website do PHP:

array_push: um conselho

Acho que testar o desempenho das duas formas mostrará o quanto é melhor livrarmos a área de heap de uma chamada de função. Vamos conhecer o material de teste:

  • Máquina: Dell Optiplex 755;
  • Sistema operacional: Fedora GNU/Linux 12, arquitetura X86_64;
  • PHP: Versão 5.3.2, pacotes dos repositórios do Fedora;
  • Ambiente: Bash, sem X. Sistema de arquivos EXT4;
  • Arquivo array.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { $a[] = 1; }?>
  • Arquivo array_push.php:
    <?php $a = array(); for ($i = 0; $i < 1000000; $i++) { array_push($a, 1); } ?>
  • Método

    • Executar cada um dos scripts PHP 100 vezes, armazenando o tempo de execução de cada um:
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array.php 2>> array.log; done;
      for i in `seq 1 100`; do /usr/bin/time -f "%e" php array_push.php 2>> array_push.log; done;
      Obs.:PC deslisgado por 30 segundos entre cada teste.
    • Ordenar os tempos de execução de cada script, do menor para o maior;
    • Descartar os 25 primeiros e 25 últimos tempos de execução;
    • Plotar a amostragem restante.

    Plotagem do resultado dos testes

    Conclusão:Realizar um code review para trocar as chamadas array_push por atribuições simples lhe dará alguns segundos de ganho. Faça isso já 😉

Gerador de planilhas Excel/Calc em PHP

You can see this post in english too.

Escrevi uma função interessante: Executá-la fornecendo uma matriz neste formato:


Array
(
[plan1] => Array
(
[0] => Array
(
[id] => 1
[name] => Adriano
)
[1] => Array
(
[id] => 2
[name] => Rodrigo
)
[2] => Array
(
[id] => 3
[name] => Manoel
)
)
)

Lhe retornará isto:

Planilha gerada pelo spreadsheet_gen.php
Planilha gerada pelo spreadsheet_gen.php

Interessante não?! A funcao é genérica, e poderá usá-la em suas classes helper, etc.

É dependente da classe Spreadsheet_Excel_Writer da PEAR.

O código fonte você pode pegar no GitHub aqui, assim poderá ser notificado de atualizações.

Opiniões são sempre bem vindas!

Até!

Error compiling PHP with GD support

Você pode ler este post em português também.

Hi Folks!

If you try to compile PHP with the –with-gd in a system that has 1.4 or higher version of libpng, you will have a compilation error.

The solution until the PHP developers does not release the next stable version with the fix is very simple, but requires that you change one line in the source code of PHP.

Short way:

  • Open the file ext/gd/libgd/gd_png.c, go to the line 148 and you will find this:
    if (!png_check_sig (sig, 8)) { /* bad signature */
  • Comment it (better) or remove it (worse), replacing with this:
    if (png_sig_cmp (sig, 0, 8)) { /* bad signature */

If you want to know all the details, visit this page at PHP website.