quarta-feira, 18 de setembro de 2013

PHP 5.4, 5.5 Traits, Generators e outras coisas boas - Hands On

Olá amigos e amigas, esse artigo é apenas para eu divulgar o Hands On que vou fazer sobre PHP 5.4 e PHP 5.5 , dessa vez ńão é apenas apresentação mas sim mão na massa de como e quando utilizar esses funcionalidades das novas versões.


Para se inscrever é só entrar aqui http://www.season.com.br/cms/treinamentos/calendario/detalhe/evento/447/ o custo de investimento é de R$ 140,00 para presencial, provavelmente vamos transmitir também mas eu ainda não sei ainda se os preços serão os mesmos, assim que eu conseguir informações eu informo.


Bem, nos vemos la!

sábado, 7 de setembro de 2013

Traits do PHP 5.4

Bem amigos(as) hoje vou falar finalmente das TRAITS adicionadas no PHP 5.4, é verdade que já faz um ano que lançaram o PHP 5.4 e eu sempre quis falar rápido sobre as poderosas traits mas sempre fiquei enrolando então, agora é a hora.


Afinal, o que são Traits? Traits são mecanismos que ajudam o problema de multipla extensão  auxiliando de forma elegante o reuso de código. Essa é basicamente a explicação da documentação mas a minha visão sobre Traits é que além de facilitar o reuso do código elas ajudam e muito uma arquitetura melhor da sua aplicação PHP e vocês vão ver pq eu acho isso.

Vamos imaginar uma situação real, vc está desenvolvendo um portal de notícias e toda interação dos usuários no site (Autenticação, comentário em notícia, adicionar agenda, comprar ingressos para show, etc...)  precisamos registrar em uma funcionalidade que grava o comportamento do usuário nesse site, não sendo necessáriamente um log mas sim uma funcionalidade para traçar perfil. 

Vamos imaginar o básico da classe de usuario e da classe de traçar perfil(vamos chamar ela de perfil apenas para estudo certo?)
Classe PERFIL RESPONSÁVEL PARA REGISTRAR E TRAÇAR PERFIL DE AÇÕES
  1. <?php
  2. class Perfil{    
  3.     public function registra($acao){
  4.         //registra uma ação
  5.     }
  6. }
E ai a nossa de usuario com uma pequena ação de alterar foto
Classe PESSOA
  
  1. <?php
  2. class Pessoa extends AppEntityPessoa{
  3.    
  4.     private $nome;    
  5.     /**
  6.      * Getters and setters
  7.      */        
  8.    
  9.    
  10.     public function alteraFoto($acao){
  11.         //faz algo...
  12.         // preciso registrar a acao na perfil como tornar isso um comportamento desse contexto?
  13.     }
  14.    
  15. }

Legal agora temos um problema que deve ser tratado seriamente como um padrão de arquitetura, se por obrigação todas minhas classes que representem dados precisam estender de uma entity da aplicação(vamos imaginar que essa é a estrutura imaginada), como eu soluciono esse problema? Existem diversas formas, mas as mais utilizadas seriam duas, a primeira seria criar uma estrutura de heranças em que em uma parte dela teriamos a classe perfil e essa por questões obvias é muito feia e sem sentido, mas ainda assim é uma solução utilizada. A segunda solução e mais recomendade seria no construtor da classe pessoa eu instânciar a classe Perfil e ai eu teria a instância injetada nessa classe utilizando esse contexto facilmente.

Pois bem apesar de uma solução melhor ainda assim não e boa e as traits resolvem isso mesmo, utilizando essa solução em traits criariamos a classe perfil como uma trait e apenas usariamos nas classes que julgamos necessário basicamente assim:
TRAIT PERFIL RESOLVENDO NOSSO PROBLEMA
  1. <?php
  2. trait Perfil{    
  3.     public function registra($acao){
  4.         //registra uma ação
  5.     }


E ai a classe pessoa utilizaria a trait com o use dentro da classe, herdando assim as características dela sem precisar instancia-la:
UTILIZANDO A TRAIT PERFIL
  1. <?php
  2. class Pessoa extends Perfil{
  3.     use Perfil;
  4.    
  5.     private $nome;    
  6.     /**
  7.      * Getters and setters
  8.      */        
  9.    
  10.    
  11.     public function alteraFoto($acao){
  12.         //faz algo
  13.         $this->registra($acao);
  14.     }
  15.    
  16. }

Conclusão

Traits resolvem de fato um problema de arquitetura sendo mais fácil pensar em como consumir classes fóra de contexto sem instancia-las ou herdar elas criando uma estrutura maluca. Frameworks vão utilizar isso com muita felicidade pois essa funcionalidade acaba com uma porrada de hierarquias gigantes criadas anteriormente.

Bem... é isso.


Referência: Documentação Oficial http://br1.php.net/manual/en/language.oop5.traits.php

domingo, 4 de agosto de 2013

Encontro PHP dia 06/08 19:30 em SP

Buenas! Esse artigo é somente para compartilhar o encontro PHP realizado pela Season onde vamos ter muito networking e compartilhamento de conhecimento. O encontro acontece dia 06/08/2013 (terça-feira) ás 19:30 na  Avenida Bernadino de Campos, nº 327 CJ 92, Bairro Paraíso - São Paulo - SP

Esse evento conta com duas palestras, sendo uma minha que vou falar sobre Domain-Driven Design aplicado no PHP e outra do Anderson Casimiro (Duodraco) que vai falar sobre Excelência em Software.

Se inscreva e participe, a inscrição é gratuita! Agora se você não puder ir se inscreve e assista via WEBCAST nesse link:

https://docs.google.com/spreadsheet/viewform?formkey=dEttMGpLNlVXQlQzSXRFUWxsb043ZUE6MA


sábado, 27 de julho de 2013

Instalando o OpenJDK 7 no Ubuntu 13.04


Olá amigos, essa é para vc que precisa do OpenJDK 7 para acessar seu internet banking ou instalar netbeans subir o solr ou coisas derivadas que precisam do java. Vamos instalar o Open JDK 7 no ubuntu 13.04


Primeiro vamos instalar o IcedTea plugin para o navegador
$ sudo apt-get install icedtea-7-plugin openjdk-7-jre


Agora O openjdk
$ sudo apt-get install openjdk-7-jdk


Bem, é isso ae.

quarta-feira, 12 de junho de 2013

Nginx php-fpm e mysql e phpmyadmin no Ubuntu 13.04

Olá amigos e amigas tudo bem? Hoje vou mostrar aqui de maneira bem objetiva como montar um ambiente padrão com o todo poderoso Nginx utilizando php-fpm e de quebra mysql no Ubuntu 13.04 ok?

No final deste pequeno artigo teremos um phpmyadmin rodando legalzinho com o nginx.


Abra o seu console e siga os passos(preciso dizer que precisa rodar como root?).


1º Vamos começar com nosso querido mysql

apt-get install mysql-client-5.5 mysql-server-5.5 php5-mysql

1º Agora o PHP
apt-get install php5 php5-cli php5-dev php5-mcrypt php5-curl php5-gd libapache2-mod-php5


2º Agora o Nginx

apt-get install nginx



3º Restart no nginx


 
/etc/init.d/nginx restart


4º Instalando o php-fpm
apt-get install php5-fpm


5º Vamos criar o diretorio www no /var para deixar la nossos fontes (vc não precisa fazer isso pode utilizar outro lugar, mas eu gosto deste)
mkdir /var/www




Agora vamos baixar os fontes do phpmyadmin em http://www.phpmyadmin.net/ estou utilizando a versão 4.0.3

Terminando o download vamos descompactar nosso amiguinho
unzip phpMyAdmin-4.0.3-all-languages.zip

E mover ele para o diretorio /var/www com o nome somente de phpMyAdmin
mv phpMyAdmin-4.0.3-all-languages /var/www/phpMyAdmin

Pronto. Agora vamos configurar os hosts do nosso phpMyAdmin

Criando a linha no hosts
vim /etc/hosts

Adicione
127.0.0.1     phpmyadmin.dev

E agora vamos criar o arquivo de configuração do nginx
vim /etc/nginx/sites-available/phpmyadmin.dev

E ai vc insere esse conteudo:

### phpmyadmin simple configuration
server {
server_name phpmyadmin.dev;
access_log /var/log/nginx/phpmyadmin.access.log;
error_log /var/log/nginx/phpmyadmin.error.log; 
client_max_body_size 5m;
client_header_timeout 1200;
client_body_timeout 1200;
send_timeout 1200;
keepalive_timeout 1200;
set $thttps off;
root /var/www/phpMyAdmin/;
try_files $uri $uri/ /index.php?$args;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_connect_timeout 1200;
fastcgi_send_timeout 1200;
fastcgi_read_timeout 1200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param APPLICATION_ENV dev;
}
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}

Cria um link maroto para o sites-enable
ln -s /etc/nginx/sites-available/phpmyadmin.dev /etc/nginx/sites-enabled/phpmyadmin.dev

por fim vamos arrumar a porta de escuta no fpm
sudo vim /etc/php5/fpm/pool.d/www.conf 

procura a linha que esta assim:
listen = /var/run/php5-fpm.sock

e mude para
listen = 127.0.0.1:9000
(lembre-se que no arquivo de conf colocamos o fast na 9000)

E da um restart na parada toda
service php5-fpm restart
/etc/init.d/nginx restart


e ai é só acessar
http://phpmyadmin.dev


Done!

Dúvidas não exite em perguntar.

sábado, 1 de junho de 2013

TDC2013

De 10 a 14 de Julho o TDC está de volta meus amigos! Vamos todos para o TDC2013 São Paulo

 The Developers Conference 2013, um evento organizado pela Globalcode

segunda-feira, 27 de maio de 2013

ZF1 para ZF2

Olá amigos(as), hoje vou apenas compartilhar aqui o video que foi o primeiro Webinar oficial da Zend feito em português pelo já conhecido e famoso Flávio Gomes Lisboa (Escritor dos livros de ZF1). Eu tive a oportunidade de assistir a transmissão ao vivo e achei muito produtiva em todos os aspectos.
Acho que o video tenta de uma forma simples comparar as diferenças entre os dois frameworks e mostrar os desafios que a Zend passou para criar esse framework tão robusto que é o Zend Framework 2.

Sendo assim segue abaixo o link do video:

http://www.zend.com/en/webinar/ZF/70170000000c4Mm-migrando-do-zf1-para-o-zf2-20130416.flv