O documento resume a história e evolução da linguagem de programação PHP. Em 3 frases:
PHP começou como um conjunto de scripts criados por Rasmus Lerdorf em 1994 para gerenciar seu site pessoal. Ao longo dos anos, tornou-se uma das linguagens de programação mais populares da internet devido à sua simplicidade e capacidade de criar aplicações web dinâmicas. Atualmente, o PHP é usado por mais de 82% dos sites da web e continua se desenvolvendo com novos recursos, padrões e frameworks para ser ainda mais poderoso e flexível.
Lightning talk apresentada no MeetUp PHPRS subseção Canela/Gramado no dia 26/11/2016 - hotel Klein Ville de Canela (RS):
http://www.meetup.com/pt-BR/PHP-RS/events/234978772/
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
Ari Stopassola Jr, Analista de Sistemas do perito.inf.br, fez a palestra "Rumo à Certificação PHP", no PHP Experience 2016.
O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/
Rogério Prado, Evangelista do PHPSP, fez a palestra "Vagrant, LXC, Docker, etc: Entenda as diferenças", no PHP Experience 2016.
O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
Essa apresentação faz parte do minicurso Zend Framework 2, onde apresentamos suas principais características e como fazer a instalação deste framework web de ponta.
Lightning talk apresentada no MeetUp PHPRS subseção Canela/Gramado no dia 26/11/2016 - hotel Klein Ville de Canela (RS):
http://www.meetup.com/pt-BR/PHP-RS/events/234978772/
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
Ari Stopassola Jr, Analista de Sistemas do perito.inf.br, fez a palestra "Rumo à Certificação PHP", no PHP Experience 2016.
O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/
Rogério Prado, Evangelista do PHPSP, fez a palestra "Vagrant, LXC, Docker, etc: Entenda as diferenças", no PHP Experience 2016.
O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
Essa apresentação faz parte do minicurso Zend Framework 2, onde apresentamos suas principais características e como fazer a instalação deste framework web de ponta.
Doctrine é uma ferramenta de ORM (mapeamento objeto-relacional) para
PHP que sobrepõe a poderosa DBAL (camada de abstração de Banco de
Dados) PDO do PHP.
Um de seus principais recursos é a possibilidade adicional de escrever
consultas à base de dados através de um dialeto-SQL OO (orientado à
objeto) chamado DQL inspirado no HQL do Hibernate. Isto provê aos
desenvolvedores uma alternativa poderosa ao SQL que mantém o máximo de
flexibilidade sem qualquer necessidade de duplicação de código.
O tema da palestra é apresentar a ferramenta como uma solução ágil
para problemas recorrentes.
Escrevi este mini curso de PHP que abrange desde o nível inicial básico até o intermediário/avançado. Este mini curso foi apresentado durante o evento WISM 2013, organizado pela PUC Minas Poços de Caldas, MG.
Pauta:
1. Introdução ao PHP;
2. Configuração do ambiente para desenvolvimento;
3. Variáveis em PHP;
4. Comandos Condicionais e Controle de fluxo;
5. Controle de fluxo: Switch;
6. Controle de fluxo: Laços de repetição;
7. Arrays em PHP;
8. Funções em PHP;
9. PHP e Banco de Dados MySQL;
10. PHP Orientado a Objetos;
11.Visão Geral: Frameworks PHP;
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
A linguagem PHP é conhecida por ser utilizada no desenvolvimento de aplicações web. Essa palestra visa apresentar o outro lado do desenvolvimento. Poucos sabem que é possível utilizar a linguagem para desenvolver tarefas agendadas, ferramentas multi-thread e diversas outras aplicações que rodam em terminal. Nessa palestra exploraremos o mundo do PHP-CLI.
Palestra de Rafael Jaques (@rafajaques)
Não é fácil escrever uma biblioteca confortável de usar. É difícil agradar a todos. Mas também é difícil agradar até quem acha que a nossa biblioteca faz algo útil. Não é fácil nem mesmo quando fazemos algo reusável só para nós mesmos.
Ainda bem que muitos outros programadores já erraram antes de nós. E existem em Python e fora dele diversos exemplos de boas libs nas quais podemos nos inspirar.
Essa palestra resumirá o que torna uma biblioteca boa, de acordo com nossa experiência e com a experiência de outros programadores que já escreveram sobre isso. Algumas características de boas bibliotecas são:
- Alta Consistência
- Muitos dados puros
- Baixa Verbosidade
- Respeito ao Principle of Least Astonishment
- Alta Extensibilidade
- Baixa Retenção
- Vários níveis de abstrações
- Alta granularidade
- Interesses claros e separados
- Pythonica
Como você pode ver, alguns aspectos acima são similares ao Zen of Python. Por isso também mostraremos funcionalidades do Python que ajudam a programar boas interfaces. Além disso, para resumir tudo definiremos um checklist que você poderá usar sempre que for escrever um módulo reusável. Esperamos que isso ajude você a programar melhor, o que certamente agradará seus parceiros de trabalho e a comunidade.
Seguindo o raciocínio de que "o processamento mais rápido é aquele que não é feito" faz-se conveniente uma estratégia de cacheamento de resultados de processamento. Mostrarei uma abordagem possível neste sentido, utilizando o REDIS, em uma arquitetura baseada em micro serviços.
Rust é uma linguagem estremamente rápida que não tem runtime, portanto pode ser integrada a qualquer outro runtime. Descubra como é fácil estender Python com Rust!
Palestra ministrada por mim e pelo Marcelo Akira no VI Forum Goiano de Software Livre. Aborda o que é ORM e como utilizar Doctrine para abstrair a camada de dados da sua aplicação.
Gravação (vídeo) da palestra: https://www.infoq.com/br/presentations/depurando-aplicacoes-php-like-a-boss
Palestra apresentada nos seguintes eventos:
- DrupalCamp Campinas, em 25/06/2016;
- The Developers Conference (TDC) São Paulo, em 09/07/2016;
- PHP Conference Brazil, em 09/12/2016;
- PHPSP + Locaweb #3, em 18/02/2017.
Doctrine é uma ferramenta de ORM (mapeamento objeto-relacional) para
PHP que sobrepõe a poderosa DBAL (camada de abstração de Banco de
Dados) PDO do PHP.
Um de seus principais recursos é a possibilidade adicional de escrever
consultas à base de dados através de um dialeto-SQL OO (orientado à
objeto) chamado DQL inspirado no HQL do Hibernate. Isto provê aos
desenvolvedores uma alternativa poderosa ao SQL que mantém o máximo de
flexibilidade sem qualquer necessidade de duplicação de código.
O tema da palestra é apresentar a ferramenta como uma solução ágil
para problemas recorrentes.
Escrevi este mini curso de PHP que abrange desde o nível inicial básico até o intermediário/avançado. Este mini curso foi apresentado durante o evento WISM 2013, organizado pela PUC Minas Poços de Caldas, MG.
Pauta:
1. Introdução ao PHP;
2. Configuração do ambiente para desenvolvimento;
3. Variáveis em PHP;
4. Comandos Condicionais e Controle de fluxo;
5. Controle de fluxo: Switch;
6. Controle de fluxo: Laços de repetição;
7. Arrays em PHP;
8. Funções em PHP;
9. PHP e Banco de Dados MySQL;
10. PHP Orientado a Objetos;
11.Visão Geral: Frameworks PHP;
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
A linguagem PHP é conhecida por ser utilizada no desenvolvimento de aplicações web. Essa palestra visa apresentar o outro lado do desenvolvimento. Poucos sabem que é possível utilizar a linguagem para desenvolver tarefas agendadas, ferramentas multi-thread e diversas outras aplicações que rodam em terminal. Nessa palestra exploraremos o mundo do PHP-CLI.
Palestra de Rafael Jaques (@rafajaques)
Não é fácil escrever uma biblioteca confortável de usar. É difícil agradar a todos. Mas também é difícil agradar até quem acha que a nossa biblioteca faz algo útil. Não é fácil nem mesmo quando fazemos algo reusável só para nós mesmos.
Ainda bem que muitos outros programadores já erraram antes de nós. E existem em Python e fora dele diversos exemplos de boas libs nas quais podemos nos inspirar.
Essa palestra resumirá o que torna uma biblioteca boa, de acordo com nossa experiência e com a experiência de outros programadores que já escreveram sobre isso. Algumas características de boas bibliotecas são:
- Alta Consistência
- Muitos dados puros
- Baixa Verbosidade
- Respeito ao Principle of Least Astonishment
- Alta Extensibilidade
- Baixa Retenção
- Vários níveis de abstrações
- Alta granularidade
- Interesses claros e separados
- Pythonica
Como você pode ver, alguns aspectos acima são similares ao Zen of Python. Por isso também mostraremos funcionalidades do Python que ajudam a programar boas interfaces. Além disso, para resumir tudo definiremos um checklist que você poderá usar sempre que for escrever um módulo reusável. Esperamos que isso ajude você a programar melhor, o que certamente agradará seus parceiros de trabalho e a comunidade.
Seguindo o raciocínio de que "o processamento mais rápido é aquele que não é feito" faz-se conveniente uma estratégia de cacheamento de resultados de processamento. Mostrarei uma abordagem possível neste sentido, utilizando o REDIS, em uma arquitetura baseada em micro serviços.
Rust é uma linguagem estremamente rápida que não tem runtime, portanto pode ser integrada a qualquer outro runtime. Descubra como é fácil estender Python com Rust!
Palestra ministrada por mim e pelo Marcelo Akira no VI Forum Goiano de Software Livre. Aborda o que é ORM e como utilizar Doctrine para abstrair a camada de dados da sua aplicação.
Gravação (vídeo) da palestra: https://www.infoq.com/br/presentations/depurando-aplicacoes-php-like-a-boss
Palestra apresentada nos seguintes eventos:
- DrupalCamp Campinas, em 25/06/2016;
- The Developers Conference (TDC) São Paulo, em 09/07/2016;
- PHP Conference Brazil, em 09/12/2016;
- PHPSP + Locaweb #3, em 18/02/2017.
Autor: Professor: Ivon Rodrigues Canedo, da Universidade Católica de Goiás (UCG)´.
Disponível aqui: http://sistemasfafram10.xpg.uol.com.br/Terc.Semestre/BDI/Banco_Dados.pdf
DevOps: A Culture Transformation, More than TechnologyCA Technologies
DevOps is not a new technology or a product. It's an approach or culture of SW development that seeks stability and performance at the same time that it speeds software deliveries to the business. We will discuss this cultural shift where development teams have to accept the feedback of operations teams and the operations team should be ready to accept frequent updates to the SW that it's running.
To learn more about DevOps solutions from CA Technologies, please visit: http://bit.ly/1wbjjqX
Por muito tempo desenvolvedores e administradores de infraestrutura tentam fazer integrações para que a implantação (deployment) seja mais efetiva, com menos sofrimento ao portar do ambiente de desenvolvimento para homologação/produção.
Essa apresentação introduz ao movimento DevOps, que aproxima desenvolvedores e administradores de sistema (sysadmin), para que trabalhem em maior sinergia.
A proposta é ilustrar os pilares da cultura DevOps, bem como os softwares que a permeia, focada em ferramentas e práticas reais, com exemplos do ecossistema PHP.
Última aula do curso de Python, aqui mostramos de forma superficial como fazer a integração do Django com Adobe Flex, como utilizar o módulo do PagSeguro, PyGame e como integrar sua aplicação com o Apache
OpenShift: NoSQL "a la carte" num PaaS 100% Open SourceEdgar Silva
A cada dia mais e mais necessidades para soluções que envolvem tecnologias NoSQL surgem nas empresas, na verdade, novas maneiras de pensar em topologias e arquiteturas de sistemas vêm fazendo com que novas demandas e desafios sejam solucionados.
Com o novo hype de Cloud, várias soluções de PaaS vem surgindo como alternativa a empreendedores e pequenos investidores tornarem reais suas idéias, além de tirá-las do papel, muitos destas idéias são grandes casos de sucesso, e até novos gigantes da nova ordem da economia digital. Entretanto, vários movimentos como : Dados Públicos, Jogos Online em HTML5 para dispositivos móveis(Tablets, SmartPhones), Geolocalização, preferências etc, são casos de usos candidatos para começarem a serem desenvolvidos nestas infraestruturas, até gratuitas como o OpenShift.
Nesta apresentação, mostraremos como você pode utilizar o Openshift, o PaaS da Red Hat, em conjunto com tecnologias como MongoDB e Infinispan para atuarem como seu recurso de armazenamento de aplicações, aplicações estas que podem ser escritas em diversas linguagens, entre elas: Python, PHP, Java e Ruby.
Apresentação realizada no dia 8/11/2014 no evento TchêLinux Bento Gonçalves edição 2014 - http://bento.tchelinux.org
Falei sobre os conceitos de bases de dados NoSQL, cases, comparações com o modelo relacional, expressões SQL x MongoDB (orientado à documentos), instalação, recursos do MongoDB, operações via console, modelagem (abordagem embedded), driver PHP, anatomia do código PHP, CRUD (Create, Read, Update and Delete), ObjectId, operadores, segurança, persistência de objetos, tratamento de arrays (documentos aninhados), índices (performance), projeção, agregação, hospedagem, ferramentas de administração e programa de certificação.
Painel: HHVM x Zephir x PHPNG - com Anderson Casimiro, Levi Ferreira e Luiz Gustavo Gavinho no InterCon PHP 2014.
Confira outras apresentações em: http://interconphp.imasters.com.br/
O InterCon PHP aconteceu no dia 19 de Julho de 2014 no Hotel Intercontinental São Paulo
Alta Performance de Aplicações PHP com NginxThiago Paes
Segunda versão da minha palestra sobre alto desempenho de aplicações web em PHP utilizando o servidor HTTP Nginx ministrada no Minicursos e Palestras do Casin – 2ª Edição
Apresentação da palestra OpenShift Origin Index - Python e Flask na prática, ministrada por Mateus Caruccio na Semana Acadêmica ICET, Feevale, em 12/04/2014.
Blog post em http://getupcloud.com/blog/?p=1607
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
Apresentação da framework de desenvolvimento de aplicações web - cakePHP.
Aprender a criar uma aplicação web em PHP usando o CakePHP.
- Instalação?
- Organização?
- Como criar um Blog?
- Autenticação?
- Multi-utilizador?
Apresentação de abertura do evento "PHP Community Summit" promovido pela Locaweb <http://lwgo.to/phpcsari> em São Paulo, nos dias 1 e 2 de setembro de 2017.
Falai do impacto do PHP contemporâneo na comunidade, dos grandes eventos dedicados a linguagem, do grupo "Rumo à Certificação PHP" e sua importância, dos grupos locais de usuários (crescimento, maturação e auto-organização) e das demandas existentes, da presença da RogueWave/Zend, recompensas, angariamento de novos membros, estagnação, empoderamento dos recrutas, karma level, diversidade, elePHPants, bulling, lideranças e celebridades, vaidades, exercício da tolerância, empatia, relacionamento com outras comunidades PHP, efeito borboleta, renovação e gratidão.
Apresentação intitulada "Rumo à Certificação PHP" na V Jornada Acadêmica de Análise e Desenvolvimento de Sistemas do IFRS - Câmpus Bento Gonçalves (que ocorreu entre os dias 6 e 7/11/2014):
http://ads.bento.ifrs.edu.br/noticias/view/id/118/
Apresentei as vantagens em ser um profissional certificado, como funciona a compra do voucher, formato do teste, qual o conteúdo do exame, tecnologias relacionadas que também são abordadas, estratégias para conduzir melhor a prova, exemplos de questões, como as versões do PHP influenciam no teste, diferenças da ZCE (PHP 5.3) x ZCPE (PHP 5.5), armadilhas, técnicas de resolução das perguntas, como lidar com as inconsistências da linguagem, preparatório, simulados e a lista "Rumo à Certificação PHP":
http://www.rumoacertificacaophp.com
Slides do Workshop de Magento promovido pelo PERITO.inf.br em Gramado (RS - Brasil).
Exploramos a instalação, uso de extensões, meios de pagamento, integração com os Correios e temas.
Trajetória de como consegui a bolsa de pesquisa científica em Portugal, inscrição no mestrado em Engenharia de Informática e de Computadores e o modelo de estudo português (Bolonha, ano letivo, políticas etc).
3. O começo…
• Rasmus Lerdorf
• Conjunto de scripts
• "Personal Home Page
Tools"
• Viveu em Porto Alegre de
1991 a 1993
Extraído de: http://lerdorf.com/resume/
15. Checar e corrigir
• Para checar o PSR-1 e PSR-2 utilize o
CodeSniffer:
phpcs --standard=PSR2 arquivo.php
• Para corrigir de eventuais problemas utilize
Code Beautifier and Fixer:
phpcbf --standard=PSR2 arquivo.php
26. Namespaces
• Definições de classes são globais, portanto o
desenvolvedor precisava ter cuidado ao nomear suas
classes – podendo sobrescrever outras bibliotecas
(de terceiros)
• Uma estratégia de nomenclatura era criar algo como:
Perito_Biblioteca_TrataImagem
• Encapsula classes, funções e constantes
• Resolve problemas no reuso de código, dentre eles:
• Colisão entre nomes
• Habilidade de abreviar nomes longos
28. Documentação
• Faz parser do código em busca de DocBlocks
• Auto-documentação
• Converte em HTML, PDF, CHM e XML
(DocBook)
• phpDocumentor
http://www.phpdoc.org
• DocBlox
http://www.docblox-project.org
• Doxygen
http://www.doxygen.org
• PHP Dox
http://phpdox.net/
37. xDebug
• Extensão PHP criada em 2002 por Derick
Rethans
• Ferramenta de debug e profiling para PHP
• Empilhamento de funções e rastreamento de
erros
• Profiling detecta gargalos de performance
• Permite uma execução passo-a-passo, mesmo
remotamente (observando o conteúdo das
variáveis)
• Não utilize em servidores de produção!
• Exibe informações privilegiadas e expõe
brechas de segurança
39. Profiling
• Identificar gargalos
• Analisa a execução do script e mede uso de
memória, tempo de execução e frequência das
chamadas de função
• Ferramentas que fazem a leitura da saída
cache grind:
• KCachegrind
• Webgrind
• MacCallGrind
• WinCacheGrind
• xdebugtoolkit ou CachegrindVisualizer (geram .dot)
• Graphviz (lê o .dot e gera uma árvore)
42. Opcode Cache
• Scripts PHP são compilados on-the-fly
• Supostamente mais lento que as linguagens
pré-compiladas
• Zend Optimizer+ tornou-se open source e foi
renomeado para OPcache
• Opcache gera um bytecode e o armazena em
memória
• É nativo no PHP 5.5 (desde que o PHP seja
compilado com a opção --enable-opcache)
43. Lab: ApacheBench
ab -n 100 -c 5 http://www.site.com/
Compare com e sem Opcache, onde diz:
Time taken for tests
44. Cenário…
Nesse caso o método CargaDescarga
(também útil na classe Transfer) deverá
ser copiado
✗
45. <?php
class Passeios {
function PagaComissao(){
return "Paga comissao...";
}
}
trait Recursos {
function CargaDescarga(){
return "Realiza carga e
descarga";
}
}
class Transfer extends Passeios {
use Recursos;
}
$obj = new Transfer;
echo $obj->CargaDescarga();
Traits
53. O que seria um build no PHP?
• Submeter aos testes (unitário, comportamento e
integração)
• Executar as migrations
• Concatenar e minificar arquivos JavaScript e CSS
• Comprimir imagens
• Compilar Sass e LESS
• Atribuir permissões em arquivos/pastas
• Produzir arquivos estáticos, como HTMLs
• Agendamentos na CRON
• php.ini local x php.ini do servidor x php.ini do CLI
• Transformar código de ECMA6 para ECMA5
54.
55. <?xml version="1.0" encoding="UTF-8"?>
<!-- Demonstração de como alterar as credenciais de BD - by Ari Jr. arijunior@gmail.com (25/4/2013)-->
<project name="CartridgeMagento" default="principal" basedir=".">
<target name="ConfiguraVarAmbiente">
<property name="db_host" value="${env.DBHOST}" override="yes" />
<property name="db_user" value="${env.DBUSER}" override="yes" />
<property name="db_pass" value="${env.DBPASS}" override="yes" />
<property name="db_name" value="${env.DBNAME}" override="yes" />
</target>
<target name="principal" depends="ConfiguraVarAmbiente" description="Altera o arquivo de conf. do
Magento">
<!-- Copia o template e aplica uma cadeia de filtros -->
<copy file="app/etc/local.xml.template" tofile="app/etc/local_outro.xml" overwrite="true">
<filterchain>
<replacetokens begintoken="{{" endtoken="}}">
<token key="db_host" value="${db_host}" />
<token key="db_user" value="${db_user}" />
<token key="db_pass" value="${db_pass}" />
<token key="db_name" value="${db_name}" />
</replacetokens>
</filterchain>
</copy>
</target>
</project>
56. IaaS
PaaS
SaaS
OpenShift, Heroku, Google App Engine (Google Cloud), AppFog,
Pagoda Box, Fortrabbit, Laravel Forge
Digital Ocean, AWS, Linode, Azure, Rackspace, Open Stack
Hospedagem: cloud
65. API para hashing de senha
• Converte a senha em um token de uma
só via
• Haviam bibliotecas separadas para essa
finalidade:
http://openwall.com/phpass/
• Dificilmente se consegue aplicar
engenharia reversa para decifrar a senha
original
66. Funções
<?php
$pass1 = password_hash("senha", PASSWORD_BCRYPT);
echo $pass1;
//$2y$10$bi8RpsxOvEt5mdmZRQjPqewPpw5OhRQcIQZWDld3/GDC3t6dL6wFC
//Tornando a hash ainda mais difícil de decifrar:
//salt (tempero) deve conter 22 caracteres
//cost representa o tempo de CPU utilizado. Deve ser de 4 a 31.
//Obs. a partir de 10 começa a comprometer significativamente a performance
$pass2 = password_hash("senha", PASSWORD_BCRYPT, array('salt'=>'Junicao2k14AriNetoPalo',
'cost'=>8));
echo $pass2;
//$2y$11$Junicao2k14AriNetoPalea7XU5I/HU2TBiIy1ISQPliFAawO8ptq
• Gera uma hash de 60 caracteres
• Constante PASSWORD_BCRYPT representa o algoritmo
BlowFish
• Constante PASSWORD_BCRYPT_DEFAULT_COST possui 10 como
padrão
67. Mapeamento Objeto Relacional (ORM)
• Persistir o objeto numa
estrutura de dados
relacional
• Tradução para tabelas,
campos e linhas
• ORM mascara detalhes
obscuros
• Overhead
• Requer aprendizagem de
outras tencnologias. Ex.:
DQL (Doctrine), Propel,
Eloquent etc.
http://www.edzynda.com/use-laravels-eloquent-orm-outside-of-laravel/
69. <?php
//SELECT * FROM artigos WHERE id=23
$artigo = AppArtigos::find(23);
$artigo->titulo = "Apresentando Modern PHP";
$artigo->publicado_em = CarbonCarbon::now();
$artigo->save();
//SELECT * FROM artigos WHERE titulo='Ari'
$artigo = AppArtigos::where('titulo', 'Ari')->get();
//SELECT * FROM artigos WHERE assunto='PHP' ORDER BY
publicado_em DESC LIMIT 10
$artigo = AppArtigos::where('assunto', 'PHP')
->orderBy('publicado_em', 'desc')
->take(10)
->get();
$artigos = AppArtigos::all();
return $artigos;
70. HHVM, Hack e PHP7
http://alshain4.deviantart.com/art/Elephant-whisperer-292023268
71. Facebook
• 12.5 milhões de
requisições por segundo
(tráfego dinâmico!)
• 260 milhões de
conexões abertas
simultaneamente
• 1.1 bilhão de usuários
ativos/mês
Dados extraídos da palestra do gaúcho
Marlon Dutra no FISL14 (em julho/2013)
intitulada "Facebook: gerenciando
tráfego globalmente para atender 1
bilhão de usuários":
https://www.youtube.com/watch?v=Sv_xpGzRiOo
http://wp.clicrbs.com.br/login/2013/07/05/conheca-marlon-o-gaucho-que-controla-os-numeros-do-facebook/?topo=13,1,1,,11,13
72.
73.
74.
75.
76.
77.
78.
79.
80. Declaração de tipos
<?php
declare(strict_types=1);
function obterTotal(float $a, float $b) : float {
return $a + $b;
}
obterTotal(2, "Ari"); //Fatal error
obterTotal(2.8, "3.2"); //Fatal error
obterTotal(2.5, 1);
//int(1) muda para float(1.0) e retorna float(3.5)
Php|tek de 2009 os líderes dos principais frameworks se encontraram.
Basic Code StyleBasic Coding Standard
Coding Style Guide
Tela do editor Coda (Panic) for Mac, só para ilustração
http://pear.php.net/manual/pt_BR/package.php.php-codesniffer.coding-standard-tutorial.phpPode checar outros formatos além do PHP, com por exemplo JS e XML.
Garantia de qualidade
Autoload mudou significativamente a forma de desenvolver aplicações. Antes da versão 5, era necessário fazer include/require em cada arquivos de classes que desejava incorporar.
Introduziu-se o __autoload();
PEAR: PHP Extension and Application Repository
PEAR são classes em PHP (incluídas no código), enquanto que PECL são extensões escritas em C
Instala pacotes num repositório central
Requer privilégios de administrador/root
Estagnada
Força a qualidade de código com inúmeras regras.
Mais moderno que os demais
Diferentes estratégias de autocarregamento: PSR-0, PSR-4, classpath, files…
composer.json
composer.lock
vendor (diretório)
A medida que a funcionalidade aumenta, mais prefixos são adicionados, deixando os nomes extremamente grandes e consequentemente difícil de manusear.
Compilação do conteúdo, mapas mentais, sínteses.
pear install PhpDocumentorConverte para HTML, PDF e CHM (windows help files)Define os “DocBlocks”
phpdoc -t docs/ -o PDF:default:default -d .
-t é o target, -d diretório que sofrerá o parserpara mais informações acesse:vim /Applications/MAMP/bin/php/php5.3.6/lib/php/data/PhpDocumentor/phpDocumentor.ini
Se aparecer um “ERROR: nothing parsed” verifique o local onde você se encontra.
phpdoc -t docs/ -o HTML:frames:phpedit -d .
https://www.youtube.com/watch?v=anr7DQnMMs0#t=1904
Aproximadamente aos 31m 47s de palestra.
Espelhamento de ambientes.Qual a imagem usar, que script Chef executar, habilitar rede, pastas compartilhadas.
Com uma linha é possível testar em diferentes versões de sistema operacional e combinações de configuração.
Usa Hyper-V (Microsoft), VirtualBox (Oracle), KVM, VMWare etc.Orientado a ambientes de desenvolvimento, pois utilizam uma camada de vitualização – prejudicando a performance.Criar um ambiente que possa ser reproduzido, quando se precisa de algo que fuja do LAMP, compatibilidade cross-platform, time trabalhando em diferentes SO. Provisionamento: setup automatizado, quanto tempo para subir uma máquina, maximizar dev/prod parity, isolamento de ambientes,
https://pt.wikipedia.org/wiki/Brian_Kernighan
Usar a intuição, remover partes e testar. Arquivos Cachegrindxdebugtoolkit é escrito em Python e o CachegrindVisualizer é Adobe Air (multiplataforma).
Para utilizar em modo trigger, passe como parâmetro na URL o XDEBUG_PROFILE=1
cachegrind.out.%p (process ID)
%t (timestamp) e %R (raiz) Ex.: cachegrind.out.1370217130-_LiveDemoxDebug_funcoes_inc_php_XDEBUG_PROFILE=1
Instalando o KCacheGrind via MacPort:
sudo port install kcachegrind
kcachegrind (para executar a aplicação)
xdebug.max_nesting_level = 4 impacta na execução do WebGrindMostrar 100% e em microsegundos.
Teste no WordPress para ter resultados mais expressivos.
Pode-se utilizar um álias com AS
function NomeDoNamespace(){
return "Namespace é: ".__NAMESPACE__."<br />";
}
Ferramentas
WYSIWYG, suporte a BD, inspeção de classes (para saber que métodos oferecem)
Eclipse PDT (PHP Developer Tools). Os “genéricos” deve escolher a perspectiva PHP.phpStorm
Excelente exercício:http://www.codeschool.com/courses/try-git
O Linux utilizava o BitKeeper (que é um software comercial)Conhecido como um “Filesystem distribuiído”
Gitosis e Gitorious pode-se baixar e instalar num servidor local. Através de um servidor, é possível ter maior controle sobre os dados.Existe também o Garrit e outros...
Habilitar SSL (Certificação digital) nos servidores, gerar documentação, Stress test: Apache Bench e SeigeECMAScript 5 é mais compatível.
Abra o terminal:sudo pear install http://phing.info/pear/phing-current.tgz
Testando se foi realmente instalado:phing –v
Deve aparecer algo como: "Phing version 2.1.1"
Siga esse mantra
Simples: procure concentrar o processo de implantação e dispará-lo em apenas UM comando.
Previsível : saber o que está acontecendo. Se houver efeitos colaterais, mantenha a versão corrente.
Reversível: UM comando e o sistema volta ao que era.
Phing é baseado no Apache Ant.
Workflow bastante utilizado
Testes funcionais usam PhpBrowser, enquanto que os testes de aceitação rodam através do PhantomJS
Testes de aceitação (Codeception) são mais proveitosos para times pequenos. Emulam a navegação no site/sistema, experimentando o funcionamento como um todo.
Segurança
print_r(get_defined_constants()); //para exibir todas as constantes pré-definidas
Memcache quando o conteúdo é o mesmo, independente de servidor.Facebook tem 805 servidores em memcache, do total de 10 mil (fizeram um fork do projeto, com suporte a UDP) – dados de 2008.Flickr – 38mil requisições/segMemcache integra com Nagios
Gearman pode rodar de forma síncrona (em primeiro plano) ou assíncrona (em background). Digg possui 400 mil jobs por dia
Experimente fazer um left outer join num ORM, ou uma função de agregação como média. Alguns falharam ao executar transações, passando a responsabilidade para a aplicação.Não há necessidade de cache, pois o mongoDB já fica em memório – o quanto houver de RAM disponível.Usar monboDB simplifica o desenvolvimento da aplicação pois não requer tratar de atualizações de registros, cache expirado etc.
Hibernate do Java e ao ActiveRecord do Rails. Mapeamento em arquivos .ini ou XMLPropel e Doctrine usam o design pattern ActiveRecord, enquanto que o Zend_Db_Table usa Table Data Gateway pattern e Row Data Gateway pattern.
Livro "Patterns of Enterprise Application Architecture" do Martin Fowler de 2003.
Patrick Shuffhttps://www.youtube.com/watch?v=MKgJeqF1DHwhttp://investor.fb.com/releasedetail.cfm?ReleaseID=893395
Criado pelo FacebookGerou competição
Dialeto do PHP (e não uma linguagem totalmente nova)
Por que pularam o PHP6?
http://www.zend.com/en/resources/php7_infographicTempo de execução quase 2 vezes mais rápido que o PHP 5.6 e 30% a menos de consumo de memória, suporta 3x mais requisições que um servidor rodando PHP 5.6.
http://www.zend.com/en/resources/php7_infographicDrupal 8 roda 72% mais rápido com PHP7
http://www.zend.com/en/resources/php7_infographic25% dos sites no mundo rodam em WordPress
Aceita int, bool, string e float (scalar). O TypeHint tradicional funciona com objetos e arrays.
Declare é habilitado por aquivo e não no php.ini (para todos). Antes do PHP7 fazia-se muitos testes unitários para checar o tipo de variável.
Pode usar híbrido.
Throwable é uma interface que a Exception e a classe Error implementam. Erros fatais chamam especificamente a Error. Error é a classe pai de TypeError, ParseError, ArithmeticError e AssertionError.
Usa a GIMP Tool Kit para aplicações gráficas desktop, suporte a skin (tema), orientada a eventos, janelas, acesso aos recursos da máquina no cliente, suporte a Widget (caixas de texto, botão, frame etc). Ex.: GNUTeca da Univates, Agata Report.
Issue tracking: Jira é comercial, mas integra com metodologias ágeis (através de plug-in). Trac é feito em Python.
One time now (da Axosoft), porém mais focado em Scrum.Ele não permitia dois responsável por uma tarefa (princípio fundamental do Pair programming – XP).Target Process, Mantis, BugzillaÉ possível agrupar as tarefas realizadas (“Done”) em uma release específica e automaticamente o Jira retira do dashboard.
Ele confronta o código com uma série de ferramentas de QA: http://phpqatools.orgSumariza a saida das principais ferramentas de qualidade. Roda uma série de análises.Métricas.Faz revisão do código, atribui badges (selos) onde a nota 4 é a máxima,
Antecipar gargalos e problemas ANTES de colocar em produção. Progresso incremental.
É possível realizar o commit e evitar o disparo do CI. Ex.: git commit –m "mensagem [CI SKIP]"http://docs.travis-ci.com/user/languages/php/
Jenkins, Travis, GitLab CI, Bamboo, Liquibase, TeamCity e Code Climate.
Mercado de trabalho
Livro lançado em fevereiro/2015.
Apacha está sendo substituído pelo NGINX
Faltou visualizar os arquivos ocultos. Ex.: .gitignore, .env etc.
Workers (mecanismo de filas como ActiveMQ), Querys SQL x MapReduce.
Recomenda-se autenticar via par de chaves, ao invés de login/senha.Karma Level.Arquitetura de cloud: IaaS x Paas- Exexmplos de IaaS: Digital Ocean, AWS, Linode, Azure, Rackspace e Open Stack
- Exemplos de PaaS: OpenShift, Heroku, Google App Engine (Google Cloud), AppFog, Pagoda Box, Fortrabbit, Laravel Forge