SlideShare uma empresa Scribd logo
1 de 67
Um panorama sobre
Padrões PSR, e como eles
vem mudando o jeito que
desenvolvemos para web!
Bom dia!Felipe Sayão Lobato Abreu
Senior Software Engineer @ KingHost
https://github.com/coisa
https://linkedin.com/in/felipesla
2
Período pré PSR
Um pouco de história!
3
1
Pré-PSR: Um pouco de história!
▰ “index.php”
▰ “functions.inc.php”
▰ “header.inc.php”
4
Pré-PSR: Um pouco de história!
▰ Orientação a Objeto
▰ MVC
▰ Frameworks
5
Pré-PSR: Um pouco de história!
▰ Começamos a “reproduzir”
6
Pré-PSR: Um pouco de história!
▰ Nos tornamos reféns!
▰ Discussões baseadas em preferências
▰ O que é responsabilidade do Framework?
7
Pré-PSR: Um pouco de história!
▰ Código altamente acoplado
▰ Não se consegue falar em testes
▰ Re-escrevemíamos código o tempo todo!
8
Pré-PSR: Um pouco de história!
▰ Frameworks já estavam ditando o mercado!
9
10
2010
Nasce a PHP-FIG!
Place your screenshot here
11
The PHP Framework
Interop Group
https://www.php-fig.org/
https://github.com
/php-fig/fig-standards
12
PSR
PHP Standards Recommendations
PSR-0
Autoloading Standard
13
3
05/11/2010
PSR-0: Autoloading Standard
▰ “Include” e “require” descontrolados
▰ Divergência de organização de arquivos
▰ Múltiplos padrões __autoload
14
PSR-0: Autoloading Standard
▰ Baixar o framework
▰ “unzip”
▰ “require”
▰ “/install/index.php”
15
COMPOSER
O gerenciador de dependências “oficial” do
PHP
1601/03/2012
PSR-1
Basic Coding Standard
17
4
04/06/2012
PSR-1: Basic Coding Standard
▰ Divergência de encodings
▰ Tag PHP
▰ Comportamentos inesperados
18
PSR-1: Basic Coding Standard
▰ Interoperabilidade técnica entre arquivos
19
PSR-2
Coding Style Guide
20
5
04/06/2012
PSR-2: Coding Style Guide
▰ Cada um faz como acha “mais bonito”
▰ Falta consistência!
▰ “Padrão sem padrão”
21
PSR-2: Coding Style Guide
▰ “Botar ordem na casa”
▰ “Aproximar códigos”
22
PSR-3
Logger
23
6
06/01/2013
PSR-3: Logger
▰ Estávamos finalmente pensando em logs!
▰ Divergência de implementações
▰ Centralizar tudo em um mesmo log
24
PSR-4
Autoloading Standard
25
7
03/12/2013
PSR-4: Autoloading Standard
▰ Substitui a PSR-0
▰ Remove compatibilidade de nomenclaturas
em desuso
26
PSR-7
HTTP Message
27
8
18/05/2015
PSR-7: HTTP Message
▰ Afinal desenvolvemos para web!
▰ A linguagem não prevê uma estrutura nativa
28
PSR-7: HTTP Message
▰ APIs everywhere!
29
PSR-7: HTTP Message
▰ Implementações altamente dependentes do
Framework
30
PSR-7: HTTP Message
▰ Divisor de águas!
▰ Frameworks simplificados e mais próximos
31
PSR-7: HTTP Message
▰ Ponto de partida para seguir outras
discussões
32
PSR-6
Caching
33
9
11/12/2015
PSR-6: Caching
▰ Problemas de performance
34
PSR-6: Caching
▰ MUITAS opções!
▰ Funcionalidades diversas
▰ Necessidade comum em várias camadas
35
PSR-6: Caching
▰ Definir uma interface comum de comunicação
em Cache
36
PSR-13
Hypermedia Links
37
10
15/11/2016
PSR-13: Hypermedia Links
▰ API’s mais completas
▰ Multiplos formatos de media
▰ Características comuns em todos os formatos
38
PSR-16
Simple Cache
39
11
02/01/2017
PSR-16: Simple Cache
▰ Implementações menos verbosas
▰ Não substitui a PSR-6
40
PSR-11
Container
41
12
14/02/2017
PSR-11: Container
42
Injeção de
dependências
Inversão de
controle
Service
Locator
PSR-11: Container
▰ Container Interop
▰ Service Locator
43
PSR-11: Container
44
PSR-11: Container
▰ Retornar objetos configurados
▰ Desacoplar lógicas de construção de objeto
▰ Agrupar tudo em um só lugar
45
PSR-11: Container
▰ Definir uma interface não resolve o problema!
46
PSR-15
HTTP Handlers
47
13
22/01/2018
PSR-15: HTTP Handlers
▰ Repensamos o tratamento HTTP
▰ Finalmente Middlewares
48
PSR-15: HTTP Handlers
49
Response
Request
- URI
- Upload
- Verbo
- Headers
- Dados
- ...
PSR-15: HTTP Handlers
50
Request Handler
Response
Request
- URI
- Upload
- Verbo
- Headers
- Dados
- ...
PSR-15: HTTP Handlers
▰ Processar uma requisição
▰ Produzir uma resposta
▰ Subir uma exceção quando “não sabe lidar”
51
PSR-15: HTTP Handlers
52
Request Handler
Response
Request
- URI
- Upload
- Verbo
- Headers
- Dados
- ...
PSR-15: HTTP Handlers
53
Request Handler
Response
Request
- Autenticação
- Cache
- Headers
- Tratamento de Erros
- Segurança
- ...
PSR-15: HTTP Handlers
54
Middleware
Request Handler
Response
Request
- Autenticação
- Cache
- Headers
- Tratamento de Erros
- Segurança
- ...
PSR-15: HTTP Handlers
55
▰ Produzir uma resposta
▰ “Decorar” e delegar
▰ Delegar e “decorar”
PSR-15: HTTP Handlers
56
▰ https://github.com/middlewares
▰ https://github.com/coisa/http
PSR-17
HTTP Factories
57
14
30/07/2018
PSR-17: HTTP Factories
▰ PSR-7 não descreve como criar objetos HTTP
▰ Facilitar códigos que não dependam de uma
implementação da PSR-7
58
PSR-18
HTTP Client
59
15
23/10/2018
PSR-18: HTTP Client
▰ Comunicação com APIs externas
▰ Desacoplamento de implementação
específica
60
PSR-14
Event Dispatcher
61
16
25/03/2019
PSR-14: Event Dispatcher
▰ Há muito presente em Frameworks e
componentes
▰ Em várias camadas e contextos
62
PSR-14: Event Dispatcher
▰ Divergência de comportamento entre
implementações
▰ Centralização de Eventos
63
PSR
Considerações Finais
64
17
PSR: Considerações Finais
▰ Saiba mais sobre as PSR
▰ Aplique-as no seu dia-a-dia
▰ Colabore!
65
PSR: Considerações Finais
▰ Estamos no caminho certo
▰ Já conseguimos gerar HTTP reaproveitável
66
67
Obrigado!
Dúvidas?
phprs@felipeabreu.com.br
https://github.com/coisa

Mais conteúdo relacionado

Mais procurados

NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webernaniaz
 
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Renato Groff
 
gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?Yago Tomé
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...Renato Groff
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...
 Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro... Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...Renato Groff
 
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019Renato Groff
 
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019Renato Groff
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Adler Medrado
 
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017Renato Groff
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryMario Guedes
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...Renato Groff
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 

Mais procurados (20)

NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação web
 
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
 
HTTP 2
HTTP 2HTTP 2
HTTP 2
 
gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Developers-SP - Out...
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...
 Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro... Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET SP - Novembro...
 
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
 
Function as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHPFunction as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHP
 
Principais Tecnologias WEB
Principais Tecnologias WEBPrincipais Tecnologias WEB
Principais Tecnologias WEB
 
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019
Boas práticas na implementação de APIs REST com ASP.NET Core - Agosto-2019
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Conceitoseaplicaes
ConceitoseaplicaesConceitoseaplicaes
Conceitoseaplicaes
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client Library
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - .NET Conf Local 201...
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 

Semelhante a Um panorama sobre padrões PSR

AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceJosé Roberto Araújo
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosEvaldo Junior
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014Fernando Boaglio
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017Renato Groff
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?Fabio Janiszevski
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019Cassio Santos
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017Renato Groff
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 

Semelhante a Um panorama sobre padrões PSR (20)

Evolucao php2
Evolucao php2Evolucao php2
Evolucao php2
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performance
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In Santos
 
Pho Aula 02
Pho Aula 02Pho Aula 02
Pho Aula 02
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Seminário: PHP
Seminário: PHPSeminário: PHP
Seminário: PHP
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
JSF - JavaServer Faces
JSF - JavaServer FacesJSF - JavaServer Faces
JSF - JavaServer Faces
 
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Python e Golang - Parte 2
Python e Golang - Parte 2Python e Golang - Parte 2
Python e Golang - Parte 2
 
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - OneDay - Junho/2017
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 

Um panorama sobre padrões PSR