A sala Assembly recebeu em seu palco, Vinícius Campitelli, Lead Developer da MT4 Tecnologia e @MediaPost. Deu início a sua palestra fazendo uma breve apresentação sobre a própria carreira.
A palestra foi dividida em três partes.
- Scrips CLI: lidando com argumentos, streams e roteamento de comandos
- Robôs: gerenciando início e termino de robos, usando pcntl ou pthreads
- Reutilização: criando códigos que rodem em mais de um ambiente
“Antes de fazer qualquer coisa, em qualquer linguagem, pense: Essa é a melhor ferramenta que eu tenho? Essa é a melhor solução para meu problemas?”
Para dar ritmo à palestra,
Argumentos
As variáveis $argc e $argv guardam informações sobre os argumentos do script. Sendo o $argv um array com argumentos passados, sendo que o indice 0 contém o nome do script invocado.
getopt()
Lê os argumentos passados na linha de comando. As opções podem ser:
- Caracteres individuais: não aceitam valores
- Caracteres seguidos por um dois-pontos: valor obrigatório
- Caracteres seguidos por dois-ponto: valor opcional
I/O Streams
Uso das funções fopen, fgets, fputs, stream_get_line e diversas outras. Disponibilização das constantes STDIN, STDOUT, STDERR.
Streams
Uso de funções como stream_context_create, stream_copy_to_stream, stream_filter_append, entre outras.
Roteamento de comandos
Organiza seu script para que ele seja modular. Crie estrutura de controllers para facilitar a manutenção.
O palestrante ainda passou rapidamente pelas bibliotecas: Zend/Console, Symfony, Laravel Zero, CLimate, Aura.Cli, CliFramework e falou da capacidade de mapeamento e facilidade de configuração da biblioteca.
Gerenciador de robôs
Um robô executa ações em background. Para iniciar, terminar e acompanhar a execução. ou você pode ter daemons “auto-executáveis” – por exemplo, diretamente via cron.
- pcnt: Extensão Process Control
- Fluxo simples de execução utilizando pcntl_fork()
- Fluxo simples de execução utilizando pcntl_waitpid()
- Fluxo simples de execução utilizando sinaisn para lidar com eventos externos
Falou um pouco sobre a classe Thread deve implementar o método run() e três pontos de atenção importantes foram listados durante a apresentação:
- Tenha cuidado ao realizar operações atômicas (métodos, synchronized, notify e wait)
- Nem toda tarefa ganha performance ao ser dividida em threads
- Não se esqueça de aguardar as threads terminarem (join)
Boas práticas para que os códigos rodem tanto na web quanto em outros ambientes:
- PHP CodeSniffer: Detecta e corrige violações de acordo com um padrão de regras (por exemplo, PSR-2)
- PHP Mess Detector: analisa diversos aspectos como variáveis desnecessárias, códigos muito complexos, etc
- SOLID: cinco princípios para deixar softwares mais entendíveis, flexíveis e de fácil manutenção
Vinícius falou sobre as configurações de ambientes, gestão e injeção de dependências, muito elogiados por ele. Para encerrar, ele presentou um exemplo de uso de threads de uma maneira bastante descontraída, mas que agradando muito e levando o público presente, que o aplaudiu durante a demonstração.